docker mysql 主从配置

作者: 39bd3c3d98f1 | 来源:发表于2018-05-04 18:23 被阅读75次

    最近有公司有需求,需要在两台机器上使用docker的方式部署mysql,并部署成主从的方式。记录一下。

    参考文章:

    一、环境准备

    准备两台机器A,B。
    两台机器都是centos7,假设A内网是192.168.1.0,B内网是192.168.1.1。

    二、准备主从mysql需要的配置文件

    mysql_master.cnf

    [mysqld]
    pid-file        = /var/run/mysqld/mysqld.pid
    socket          = /var/run/mysqld/mysqld.sock
    datadir         = /var/lib/mysql
    #log-error      = /var/log/mysql/error.log
    # By default we only accept connections from localhost
    bind-address   = 0.0.0.0
    port=3307
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    
    
    ## 设置server_id,一般设置为IP,注意要唯一
    server_id=100
    ## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
    binlog-ignore-db=mysql
    # 如果备份多个数据库,重复设置这个选项即可
    binlog-do-db=my_db
    ## 开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)
    log-bin=edu-mysql-bin
    ## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
    binlog_cache_size=1M
    ## 主从复制的格式(mixed,statement,row,默认格式是statement)
    binlog_format=mixed
    ## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
    expire_logs_days=7
    ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
    ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
    slave_skip_errors=1062
    

    mysql_slave.cnf

    [mysqld]
    pid-file        = /var/run/mysqld/mysqld.pid
    socket          = /var/run/mysqld/mysqld.sock
    datadir         = /var/lib/mysql
    #log-error      = /var/log/mysql/error.log
    # By default we only accept connections from localhost
    bind-address   = 0.0.0.0
    port=3307
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    
    
    ## 设置server_id,一般设置为IP,注意要唯一
    server_id=101
    ## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
    binlog-ignore-db=mysql
    # 如果备份多个数据库,重复设置这个选项即可
    binlog-do-db=my_db
    ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
    log-bin=edu-mysql-slave1-bin
    ## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
    binlog_cache_size=1M
    ## 主从复制的格式(mixed,statement,row,默认格式是statement)
    binlog_format=mixed
    ## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
    expire_logs_days=7
    ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
    ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
    slave_skip_errors=1062
    ## relay_log配置中继日志
    relay_log=edu-mysql-relay-bin
    ## log_slave_updates表示slave将复制事件写进自己的二进制日志
    log_slave_updates=1
    ## 防止改变数据(除了特殊的线程)
    read_only=1
    

    三、配置主mysql

    1、安装mysql

    拷贝mysql_master.cnf到机器A的/mnt/mysql/mysql_master.cnf,执行下列命令:

    sudo docker run --net host  --name mymysql -v /mnt/mysql:/var/lib/mysql -v /mnt/mysql/mysql_master.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -e MYSQL_ROOT_PASSWORD=password   --restart always -d mysql
    

    2、配置

    # 连接mysql
    docker run -it --net host  --rm mysql sh -c 'exec mysql -h "127.0.0.1" -P 3307 -uroot -ppassword'
    # 执行下列sql
    create database my_db;
    CREATE USER 'slave'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; 
    show master status;  
    

    执行show master status; 以后要记住File、Position两个参数,在配置从mysql的时候会用到。


    mysql_slave.png

    四、配置从mysql

    1、安装mysql

    拷贝mysql_slave.cnf到机器B的/mnt/mysql/mysql_slave.cnf,执行下列命令:

    sudo docker run --net host  --name mymysql -v /mnt/mysql:/var/lib/mysql -v /mnt/mysql/mysql_slave.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -e MYSQL_ROOT_PASSWORD=password   --restart always -d mysql
    

    2、配置

    # 连接mysql
    docker run -it --net host  --rm mysql sh -c 'exec mysql -h "127.0.0.1" -P 3307 -uroot -ppassword'
    # 执行下列sql
    create database my_db;
    # master_log_file 对应 File
    # master_log_pos 对应 Position
    change master to master_host='192.168.1.0', master_user='slave', master_password='password', master_port=3307, master_log_file='edu-mysql-bin.000004', master_log_pos=2611, master_connect_retry=10;  
    show slave status;  
    start slave;  
    show slave status;  
    

    五、测试

    # 在主mysql创建表并插入数据
    create table hi_tb(id int(3),name char(10));
    insert into hi_tb values(001,'bobu');
    
    # 在从数据库检查可以看到已经有对应的数据
    show tables;
    select * from hi_tb;
    

    相关文章

      网友评论

      本文标题:docker mysql 主从配置

      本文链接:https://www.haomeiwen.com/subject/mhzqhftx.html