Mysql 主从同步笔记

为了方便操作,这里使用docker(docker安装与使用详见:链接

环境准备

  1. 创建网桥 docker network create nw-ms
  2. 主MySQL环境:docker run -it --name=master --network=nw-ms --network-alias=master uetty/mysql:5.7.23
  3. vim /etc/mysql/mysql.conf.d/mysqld.cnf 添加两行
    server-id = 1
    log_bin = /var/log/mysql/mysql-bin.log
  4. 重启MySQL service mysql restart
  5. 退出容器 ctrl + p && ctrl + q
  6. 从MySQL环境:docker run -it --name=slave --network=nw-ms --network-alias=slave uetty/mysql:5.7.23
  7. vim /etc/mysql/mysql.conf.d/mysqld.cnf 添加两行
    server-id = 100
    log_bin = /var/log/mysql/mysql-bin.log
  8. 修改从服务器UUID使其不跟主服务器一样(使用docker部署同一台机子上会出现uuid一样的情况)vim /var/lib/mysql/auto.cnf
  9. 重启MySQL service mysql restart
  10. 退出容器 ctrl + p && ctrl + q

创建从服务器登陆主服务器账号并授权

  1. 进入主服务器 docker exec -it master bash
  2. 登陆mysql:mysql -uroot -p123456
  3. 创建账号并授权
    create user root@'slave.nw-ms' identified by '123456'; 登陆用户ip限制根据需要随意放宽
    grant replication slave on *.* to 'root'@'slave.nw-ms' identified by ‘123456’;
    flush privileges;
  4. 查看当前log文件名及位置作为同步起始点(保证主库停止更新的情况下,如果还有更新任务,应暂时锁表禁止更新FLUSH TABLES WITH READ LOCK,待主从库数据相同,并且记录下主库file和position之后再解除UNLOCK TABLES;
    show master status; 如下所示,记录下File和Position
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      752 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
  1. 退出主服务器ctrl + p && ctrl + q

从服务器配置

确保从服务器数据与主服务器相同

  1. 进入从服务器 docker exec -it slave bash
  2. 登陆mysql:mysql -uroot -p123456
  3. 设置同步参数 change master to master_host='master', master_user='root', master_password='123456', master_log_file='mysql-bin.000001', master_log_pos=752; 注:此处master_host对应docker容器运行时的--network-alias,也可直接使用ip地址,master_log_filemaster_log_pos即对应前面show master status;所显示的数据
  4. 开始同步 start slave;
  5. 验证是否成功 show slave status\G,查看列出的信息内的以下两个参数值是否不为NO,否则同步失败,若同步失败可关注Last_IO_Error参数找出同步失败原因
Slave_IO_Running: Yes  
Slave_SQL_Running: Yes  
  1. 最后就可以在主库中写一些数据试试看了
原创文章 43 获赞 22 访问量 8万+

猜你喜欢

转载自blog.csdn.net/Vincent_Field/article/details/85410034