mysql配置主从复制笔记

搭建环境

docker+mysql 5.7模拟双机热备

  1. 搭建主库

    docker run -d -p 13306:3306 -v /DockerProject/mysql/master/conf:/etc/mysql/conf.d --name mysql-master -e MYSQL_ROOT_PASSWORD=root mysql:5.7
  2. 搭建从库

    docker run -d -p 13307:3306 -v /DockerProject/mysql/master/conf:/etc/mysql/conf.d --name mysql-slave -e MYSQL_ROOT_PASSWORD=root mysql:5.7
  3. 复制配置文件

    # 复制到主库配置挂载目录
    docker cp mysql-master:/etc/my.cnf /DockerProject/mysql/master/conf
    # 复制到从库配置挂载目录
    docker cp mysql-slave:/etc/my.cnf /DockerProject/mysql/slave/conf

    如果发现没有加载自定义配置时,可能是my.cnf给的权限太高了(world-writable),需要将权限改动一下:

    # 进入容器执行
    chmod 644 /etc/mysql/conf.d/my.cnf

配置主库

  1. 编辑配置文件 /DockerProject/mysql/master/conf/my.cnf

    [mysqld]
    # 新增以下配置
    log-bin=mysql-bin # 存储二进制快照的文件名
    server-id=1 # 在集群中唯一
    expire_logs_days=10 # 快照过期时间(天)
    # binlog_do_db = db1 # 指定需要同步的数据库名
    # binlog_ignore_db = mysql # 忽略同步的数据库名
    
  2. 新建一个用于执行复制的mysql用户

    CREATE USER 'slave_replication'@'%' IDENTIFIED BY '123456';
    GRANT FILE, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave_replication'@'%';
  3. 重启mysql,查看binlog是否开启

    -- 查看变量
    show variables like '%log_bin%';
    -- 查看快照文件名和pos
    show master status;

配置从库

  1. 编辑配置文件 /DockerProject/mysql/slave/conf/my.cnf

    [mysqld]
    # 新增以下配置
    server-id=2
    relay-log=relaylog # 开启中继日志,将主库的binlog保存在自己的中继日志中。
    #GTID_MODE=ON#开启GTID模式 
  2. 配置主库参数

    相关语法:https://dev.mysql.com/doc/refman/5.7/en/change-master-to.html

    -- 从库数据库服务器要用内网ip,不要用回环ip127.0.0.1,否者从库会连接不了主库。
    -- master_log_pos和master_log_file在主库执行show master status可以看到,如果是5.7可以使用MASTER_AUTO_POSITION=1自动定位。
    change MASTER TO master_host='192.168.1.50',master_port=13306, master_log_pos=154,master_log_file='mysql-bin.000003',master_user='root', master_password='root';
  3. 重启mysql,查看slave状态

    -- Slave_IO_Running和Slave_SQL_Running为Yes即为启动成功
    show slave status;
    -- 启动slave
    -- start slave;
    -- 关闭slave
    --- stop slave;

mysql配置主从复制笔记
http://blog.icy8.cn/posts/39374/
作者
icy8
发布于
2022年10月1日
许可协议