docker安装mysql(主从复制)

  1. 拉取容器

    docker pull mysql
    
  2. 运行容器:
    master1

    docker run -itd -p 3306:3306 --name mysql-master -v /mydata/mysql-master/conf:/etc/mysql/conf.d -v /mydata/mysql-master/logs:/logs -v /mydata/mysql-master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
    

    slave1

    docker run -itd -p 3306:3306 --name mysql-slave1  -v /mydata/mysql-slave/conf:/etc/mysql/conf.d -v /mydata/mysql-slave/logs:/logs -v /mydata/mysql-slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
    

    slave2

    docker run -itd -p 3306:3306 --name mysql-slave2  -v /mydata/mysql-slave/conf:/etc/mysql/conf.d -v /mydata/mysql-slave/logs:/logs -v /mydata/mysql-slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
    
  3. master配置,在/mydata/mysql-master/conf下创建my.cnf文件

    [mysqld]
    ## 设置server_id,同一局域网中需要唯一
    server_id=200
    ## 指定不需要同步的数据库名称
    binlog-ignore-db=mysql  
    ## 指定需要同步的数据库名称  #binlog-do-db=
    ## 开启二进制日志功能  
    #记录所有更改数据的语句,可以用于主从服务器之间的数据同步,以及服务器遇到故 障时数据的无损失恢复。
    log-bin=mall-mysql-bin  
    ## 设置二进制日志使用内存大小(事务)
    binlog_cache_size=1M  
    ## 设置使用的二进制日志格式(mixed,statement,row)
    binlog_format=mixed  
    #statement 记录所有的写操作到bin-log文件 缺点:sql语句执行set time=now() 会出现主从不一致  
    #row 记录每行的变换  缺点:数据量大的时候,记录数据多
    #mixed是statement和row的混合  
    ## 二进制日志过期清理时间。默认值为0,表示不自动清理。
    expire_logs_days=7  
    ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
    ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
    slave_skip_errors=1062
     
    #通用查询日志
    #记录所有连接的起始时间和终止时间,以及连接发送给数据库服务器的所有指令, 对我们复原操作的实际场
    #景、发现问题,甚至是对数据库操作的审计都有很大的帮助。
    general_log=ON  
    general_log_file=/var/lib/mysql/mysql-general.log 
     
    #慢查询日志
    #记录所有执行时间超过long_query_time的所有查询,方便我们对查询进行优化。
    slow_query_log=ON 
    slow_query_log_file=/var/lib/mysql/mysql-slow.log 
    long_query_time=3 
    #设置慢查询的阈值为3秒,超出此设定值的SQL即被记录到慢查询日志
    log_output=FILE
    max_allowed_packet=200M
     
    #错误日志
    #记录MySQL服务的启动、运行或停止MySQL服务时出现的问题,方便我们了解服务器的 状态,从而对服务器进行维护。
    log-error=/var/lib/mysql/mysql-error.log
    

    slave1配置,/mydata/mysql-master-slave/conf创建my.cnf文件

    [mysqld]
    ## 设置server_id,同一局域网中需要唯一
    server_id=201
    ## 指定不需要同步的数据库名称
    binlog-ignore-db=mysql  
    ## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
    log-bin=mall-mysql-slave1-bin  
    ## 设置二进制日志使用内存大小(事务)
    binlog_cache_size=1M  
    ## 设置使用的二进制日志格式(mixed,statement,row)
    binlog_format=mixed  
    ## 二进制日志过期清理时间。默认值为0,表示不自动清理。
    expire_logs_days=7  
    ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
    ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
    slave_skip_errors=all 
     
    # relay_log配置中继日志
    #用于主从服务器架构中,从服务器用来存放主服务器二进制日志内容的一个中间文件。 从服务器通过读取中继#日志的内容,来同步主服务器上的操作。
    relay_log=mall-mysql-relay-bin  
    ## log_slave_updates表示slave将复制事件写进自己的二进制日志
    log_slave_updates=1  
    ## slave设置为只读(具有super权限的用户除外)
    read_only=1
    

    slave2配置,/mydata/mysql-master-slave/conf创建my.cnf文件

    [mysqld]
    ## 设置server_id,同一局域网中需要唯一
    server_id=202
    ## 指定不需要同步的数据库名称
    binlog-ignore-db=mysql  
    ## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
    log-bin=mall-mysql-slave1-bin  
    ## 设置二进制日志使用内存大小(事务)
    binlog_cache_size=1M  
    ## 设置使用的二进制日志格式(mixed,statement,row)
    binlog_format=mixed  
    ## 二进制日志过期清理时间。默认值为0,表示不自动清理。
    expire_logs_days=7  
    ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
    ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
    slave_skip_errors=all 
     
    # relay_log配置中继日志
    #用于主从服务器架构中,从服务器用来存放主服务器二进制日志内容的一个中间文件。 从服务器通过读取中继#日志的内容,来同步主服务器上的操作。
    relay_log=mall-mysql-relay-bin  
    ## log_slave_updates表示slave将复制事件写进自己的二进制日志
    log_slave_updates=1  
    ## slave设置为只读(具有super权限的用户除外)
    read_only=1
    
  4. 进入master容器,进入数据库,master容器实例内创建数据同步用户

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t7uB1lqQ-1684914908373)(C:\Users\donghr\AppData\Roaming\Typora\typora-user-images\image-20220809100947397.png)]

    CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
    

    在主数据库中查看主从同步状态 show master status;
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-einmw2OH-1684914908373)(C:\Users\donghr\AppData\Roaming\Typora\typora-user-images\image-20220809101036613.png)]

  5. 进入2个slave容器内部 运行如下命令

    change master to master_host='10.1.4.200', master_user='slave', master_password='123456', master_port=3306, master_log_file='mall-mysql-bin.000001', master_log_pos=711, master_connect_retry=30;
    
  6. 在从数据库中开启主从同步

    start slave;
    
  7. 在从数据库中查看主从同步状态

    show slave status \G;
    

    出现如下情况说明成功:2个yes

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值