docker 实现mysql主从同步创建主服务器容器以mysql5.7为例docker pull mysql:5.7 #拉取mysql5.7镜像 ​ docker run -p 3307:3306 --name mysql1-master \ -v /mydata/mysql1-master/log:/var/log/mysql \ -v /mydata/mysql1-master/data:/var/lib/mysql \ -v /mydata/mysql1-master/conf:/etc/mysql/conf.d \ -e MYSQL_ROOT_PASSWORDroot \ -d mysql:5.7 #创建容器名为mysql1-master 映射端口为3307 本地为3306 的容器 ​ docker exec -it mysql1-master /bin/bash #进入容器 ​ mysql -uroot -p #进入mysql1-master 密码是root ​ #在主库创建同步账户slave: CREATE USER slave2% IDENTIFIED BY 123456; #添加账户权限 GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO slave%; #刷新权限 FLUSH PRIVILEGES; ​创建从服务器容器docker run -p 3308:3306 --name mysql1-slave \ -v /mydata/mysql1-slave/log:/var/log/mysql \ -v /mydata/mysql1-slave/data:/var/lib/mysql \ -v /mydata/mysql1-slave/conf:/etc/mysql/conf.d \ -e MYSQL_ROOT_PASSWORDroot \ -d mysql:5.7 #创建从服务器 docker run -p 3309:3306 --name mysql1-slave2 \ -v /mydata/mysql1-slave2/log:/var/log/mysql \ -v /mydata/mysql1-slave2/data:/var/lib/mysql \ -v /mydata/mysql1-slave2/conf:/etc/mysql/conf.d \ -e MYSQL_ROOT_PASSWORDroot \ -d mysql:5.7 docker run -p 3310:3306 --name mysql1-slave3 \ -v /mydata/mysql1-slave3/log:/var/log/mysql \ -v /mydata/mysql1-slave3/data:/var/lib/mysql \ -v /mydata/mysql1-slave3/conf:/etc/mysql/conf.d \ -e MYSQL_ROOT_PASSWORDroot \ -d mysql:5.7从服务器的配置文件如下(在/mydata/mysql1-slave/conf下没有就 vim /mydata/mysql1-slave/conf/my.cnf)[mysqld] ## 设置server_id同一局域网中需要唯一,如果有多个slave库请保证该id不同 server_id2 ## 指定不需要同步的数据库名称 binlog-ignore-dbmysql ## 开启二进制日志功能以备Slave作为其它数据库实例的Master时使用 log-binmall-mysql-slave1-bin ## 设置二进制日志使用内存大小事务 binlog_cache_size1M ## 设置使用的二进制日志格式mixed,statement,row binlog_formatmixed ## 二进制日志过期清理时间。默认值为0表示不自动清理。 expire_logs_days7 ## 跳过主从复制中遇到的所有错误或指定类型的错误避免slave端复制中断。 ## 如1062错误是指一些主键重复1032错误是因为主从数据库数据不一致 slave_skip_errors1062 ## relay_log配置中继日志 relay_logmall-mysql-relay-bin ## log_slave_updates表示slave将复制事件写进自己的二进制日志 log_slave_updates1 ## slave设置为只读具有super权限的用户除外 read_only1修改完配置后重启slave实例 docker restart 容器实例名配置多个从服务器时建议在相应的配置稳健性下写一个配置文件vim /mydata/mysql1-slave2/cnf/server_id.cnf [mysqld] server-id 2 #此处server-id与上面的my.cnf里的server_id相对应在master 中查看同步状态position 那一栏相当于从库连接主库的一个验证码会随时间变动建议配置slave中主从配置时先查看msater中的同步状态show master status; mysql show master status \G *************************** 1. row *************************** File: mall-mysql-bin.000001 Position: 10747 Binlog_Do_DB: Binlog_Ignore_DB: mysql Executed_Gtid_Set: 1 row in set (0.00 sec) mysql在slave中配置主从复制mysql change master to master_host192.168.75.134, master_userslave,master_password123456,master_port3307, master_log_filemall-mysql-bin.000001,master_log_pos769,master_connect_retry30; ​ ​ ​ #master_host master主机地址 #master_user 主从连接的用户名 #master_password 主从连接的密码 #master_host master的端口 #master_log_file master的bin-log文件 #master_log_pos master数据同步的位置这一整段中没有回车show slave status \G #查看 #重点查看Slave_IO_Running Slave_SQL_Running 是否都是YES此时可以在主库建库建表在从库查看是否同步