Mysql主从备份配置
准备工作
两台机器/两个docker mysql容器
配置步骤
-
修改配置文件master…cnf(主)
增加如下:
[mysqld]
server-id=1
#开启二进制记录
log-bin=mysql-bin -
修改配置文件 slave.cnf(从)
增加如下:
server-id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
3.容器启动
docker run -p 3306:3306 --name mastermysql -v /usr/soft/webapp/mysql/master.cnf:/etc/mysql/conf.d/master.cnf -v /home/data/mysql:/var/lib/mysql -d --restart always -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
docker run -p 3307:3306 --name slavemysql -v /usr/soft/webapp/mysql/slave.cnf:/etc/mysql/conf.d/slave.cnf -v /home/data/mysql/slave01:/var/lib/mysql -d --restart always -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
4.启动容器后进入先进入主mysql(如果没用docker 则跳过此步骤)
docker exec -it mastermysql bash
5.进入mysql后查看master状态
登录mysql:mysql -u 用户名 -p密码
查看master状态:
show master status \G;
6.在Master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
7.在从数据库Slave 中进入 mysql,配置主数据库
change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 2830, master_connect_retry=30;
参数说明
master_host :Master的地址(如果是容器则输入本机ip)
master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
8.查看slave状态
show slave status \G;
正常情况下,未开启主从复制过程 Slave_IO_Running和Slave_SQL_Running都是NO
9.开启复制过程
start slave;
10.查看状态
show slave status \G;
正常情况:
(恭喜配置完成)
测试
1.登陆两个数据库
2.在主数据库中新建数据库 如果没用工具则可以通过命令行来处理
create database test;
然后刷新从数据库
排错
原因:
1.网络不通
2.密码不对
3.pos不对
2.slave_sql_running:No
造成原因:
- 可能在从数据库上进行了写操作
- 可能从数据库机器或容器重启,是不回滚造成的
解决办法:
方法一:
stop slave;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave;
方法二:
1.停掉slave服务:
stop slave;
2.到主数据库查看状态:
show master status \G;
记录File和Position
3.在从数据库slave服务器上执行手动同步
change master to master_host=‘192.168.1.214’, master_user=‘slave’, master_password=‘123456’,
master_port=3306,master_log_file=mysql-bin.000001’,master_log_pos=32734 ;
4.然后启动slave服务
start slave;
注意事项
如果主数据库存在A 库 而从数据库不存在 如果此时删除A库的话 同步会停止 需要重启
上一篇: UVa 514(栈)铁轨
下一篇: MySQL主从备份