dokcer搭建mysql主从集群

master 192.128.1.146
salave 192.168.1.245

 

  • master搭建

    1.拉取镜像:docker pull mysql:5.7.19     

    2.运行:docker run -p 3306:3306 --name mysql -v /mysql/conf:/etc/mysql/conf.d -v /mysql/data:/var/lib/mysql -v /mysql/bin-log:/logs -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.19

    3.修改root账户允许远程连接:docker exec  -it containerId /bin/sh 进入docker内部,执行mysql -uroot -p,输入密码,进入mysql命令行操作界面。

    GRANT ALL ON *.* TO 'root'@'%';
    flush privileges;

    4.修改my.cnf文件开启二进制日志:   服务器/mysql/conf目录创建my.cnf配置文件

    [mysqld]

    log-bin=/logs/mysql-bin #开启二进制日志,master节点必须开启
    server-id=1 #设置server-id
    master-info-repository=table # 能够使用set global 动态改动
    relay-log-info-repository=table # 能够使用setglobal 动态改动
    relay-log-recovery=1 # 仅仅读參数,必须改动my.cnf重新启动mysql
    enforce_gtid_consistency = warn
    enforce_gtid_consistency = on
    gtid_mode = off_permissive
    gtid_mode = on_permissive
    gtid_mode = on

    lower_case_table_names=1 #0:区分大小写,1:不区分大小写
    default-time_zone = '+8:00'


    5.重启mysql服务
    6.创建数据同步账户

    CREATE USER 'repL'@'%' IDENTIFIED BY 'slavepass';#创建用户
    GRANT REPLICATION SLAVE ON *.* TO 'repL'@'%';#分配权限
    flush privileges; #刷新权限
    SHOW MASTER STATUS;

  • slave搭建

    1.拉取镜像:docker pull mysql:5.7.19     

    2.运行:docker run -p 3306:3306 --name mysql -v /mysql/conf:/etc/mysql/conf.d -v /mysql/data:/var/lib/mysql -v /mysql/bin-log:/logs -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.19

    3.修改root账户允许远程连接:docker exec -it containerId  /bin/sh 进入docker内部,执行mysql -uroot -p,输入密码,进入mysql命令行操作界面。

    GRANT ALL ON *.* TO 'root'@'%';
    flush privileges;

    4.修改my.cnf文件:   服务器/mysql/conf目录创建my.cnf配置文件

    [mysqld]
    server-id=2 #设置server-id,必须唯一

    master-info-repository=table # 能够使用set global 动态改动
    relay-log-info-repository=table # 能够使用setglobal 动态改动
    relay-log-recovery=1 # 仅仅读參数,必须改动my.cnf重新启动mysql
    enforce_gtid_consistency = warn
    enforce_gtid_consistency = on
    gtid_mode = off_permissive
    gtid_mode = on_permissive
    gtid_mode = on

    lower_case_table_names=1 #0:区分大小写,1:不区分大小写
    default-time_zone = '+8:00'


    5.重启mysql服务
    6.执行同步脚本

    CHANGE MASTER TO MASTER_HOST='192.168.1.146',MASTER_USER='repL',MASTER_PASSWORD='slavepass',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=1382;

    MASTER_LOG_FILE与MASTER_LOG_POS根据master查询得到

    START SLAVE;

    SHOW SLAVE STATUS;
    slave_io_running与slave_sql_running均为yes表示同步成功。

    7.如果主库有数据则需要先把数据导入从库。    执行FLUSH TABLES WITH READ LOCK,锁住主库数据,从库导入完成之后,执行UNLOCK TABLES解锁。

posted @ 2020-06-03 09:08  故约翰  阅读(114)  评论(0)    收藏  举报