MySQL数据库的主从同步配置

说明:

        准备了一台centos7服务器,作为master数据库,准备了一台windows服务器,作为slave数据库。

        MySQL的版本使用5.7版本。

1.主数据库(master)的配置

(主库采用了docker的安装方式,可以参考:https://www.cnblogs.com/sablier/p/11605606.html

# 创建mysql的容器镜像
docker run -d -p 3306:3306 --privileged=true -v /usr/local/docker/mysql3306/conf:/etc/mysql -v /usr/local/docker/mysql3306/logs:/var/log/mysql -v /usr/local/docker/mysql3306/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name mysql3306 mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
# 关闭mysql的镜像
docker stop mysql3306
# 启动mysql的镜像
docker start mysql3306
# 进入容器内的命令行
docker exec -it mysql3306 bash
# 查看mysql配置文件位置
mysql --help | grep my.cnf


## 配置文件,通过映射,映射到了centos中,在那里修改就行
  • 打开主数据的配置文件,添加以下配置。

(在/usr/local/docker/mysql3306/conf目录下,新建my.cnf文件)

[mysqld]
server_id=1 #主库和从库需要不一致,配一个唯一的ID编号,1至32。 手动设定
log-bin=mysql-bin #二进制文件存放路径,存放在根目录data
binlog-do-db=itools_sample #需要复制的库,多个库用逗号隔开,如果此项不配置所有主库都参与复制
binlog-ignore-db  = mysql  #不备份的数据库
binlog-ignore-db  = information_schema   #不备份的数据库
binlog-ignore-db  = performation_schema   #不备份的数据库
binlog-ignore-db  = sys   #不备份的数据库
  • 重启mysql
docker restart mysql3306
  • 通过客户端连入MySQL,查看master状态
show master status

显示如上信息,说明主数据库配置成功。

  • 创建从库使用的账户
mysql> grant replication slave on *.* to 'backup'@'%' identified by 'backup2020';

mysql> flush privileges;

在客户端使用该账户,测试能否链接到主库。

2.从数据库(slave)配置

  • 同步主库的内容,确保主从数据库的数据一致
  • 添加如下配置文件
[mysqld]
server-id = 2
log-bin=mysql-bin
replicate-do-db = demo_db
replicate-ignore-db = mysql,information_schema,performance_schema
  • 重启mysql服务
  • 进行主从配置
// 停止 slave
mysql> stop slave;
// 根据master中的status,添加以下配置
msyql> change master to master_host='192.168.3.220',master_port=3306,master_user='backup',master_password='backup2020',master_log_file=' mysql-bin.000001 ',master_log_pos=154;
// 启用slave
mysql> start slave;
// 查看slave状态
mysql> show slave status

// 出现下面两个说明配置正确
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

主从配置完成。

3.可能遇到的问题

  • slave状态:slave_io_running=no

可能是配置的master_log_file以及master_log_pos错误,

主库每次重启,这两个东西都可能有变化,

进入主库,使用 show master status 命令查案主库的log_file 以及 log_pos

然后修改从库的主从配置

mysql> stop slave;                 
mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000026', MASTER_LOG_POS=591;  
mysql> start slave;                               
mysql> show slave status 

配完还不生效的话,再试试这个

stop slave;
reset slave;
start slave;
  • slave状态:slave_SQL_running=no

原因应该是主从数据不一致导致的错误。

方法1:

忽略错误,继续同步

mysql> stop slave;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave;

方法2:

重新做主从同步

# 先进入主库进行锁表
mysql> flush table with read lock;
# 把数据进行备份
mysql> mysqldump -uroot -p --opt -R demo_db > /data/bakup.sql
# 查看主数据库信息
mysql> show master status;

# 进入从库
mysql> stop slave;
# 导入备份的数据
mysql> source /data/bakup.sql
# 重置同步
mysql> reset slave;
# 重新设置主从
mysql> change master to master_host='192.168.0.105',master_user='backup',master_password='Root@123',master_log_file='mysql-bin.000003',master_log_pos=154;
# 启动slave
mysql> start slave;
mysql> show slave status\G;

# 主数据库解锁
mysql> unlock tables;

方法3:

输入 show slave status;查看last_error的说明,根据这个错误的代码,在slave数据库的my.cnf的中加入如下配置:

slave-skip-errors=1062,1060

我这里出现了1062和1060两个错误,所以忽略了这两个

  • 都是yes,但是就是不同步

可以试试删除以往的bin_log日志【主库】,然后重新配置主从同步。

PURGE MASTER LOGS BEFORE '2020-08-31 16:00:00'

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值