master
docker run -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --network rootnet --ip 172.18.0.10 -v /usr/soft/mysql-master/data:/var/lib/mysql:rw -v /usr/soft/mysql-master/log:/var/log/mysql:rw -v /usr/soft/mysql-master/config/my.cnf:/etc/mysql/my.cnf:rw -v /etc/localtime:/etc/localtime:ro --name mysql8-master -d mysql
my.cnf
###主数据库配置 [mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql secure-file-priv= NULL # Custom config should go here !includedir /etc/mysql/conf.d/ default_authentication_plugin= mysql_native_password # 主从同步设置 # 设置同步的binary log二进制日志文件名前缀, 默认为binlog; 在MySQL 8.0中, 无论是否指定--log bin选项, 默认情况下都会启用二进制日志记录, 并将log_bin系统变量设置为ON log-bin=mysql-bin # 服务器唯一id,默认为1,值范围为1~2^32−1. 主数据库和从数据库的server-id不能重复 server-id=1 ###可选配置 # 需要主从复制的数据库,如多个则重复配置 binlog-do-db=test # 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步),如多个则重复配置 binlog-ignore-db=mysql # 为每个session分配的内存,在事务过程中用来存储二进制日志的缓存 binlog_cache_size=1M # 主从复制的格式(mixed, statement, row 默认格式是statement. 建议是设置为row, 主从复制时数据更加能够统一) binlog_format=row # 配置二进制日志自动删除/过期时间,单位秒,默认值为2592000,即30天; 8.0.3版本之前使用expire_logs_days, 单位天数,默认值为0, 表示不自动删除. binlog_expire_logs_seconds=2592000 # 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断,默认OFF关闭,可选值有OFF、all、ddl_exist_errors以及错误码列表。8.0.26版本之前使用slave_skip_errors # 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=1062
创建用户
CREATE USER 'repl'@'172.18.0.11' IDENTIFIED BY '123456';
授权
GRANT REPLICATION SLAVE ON . TO 'repl'@'172.18.0.11';
slave
docker run -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 --network rootnet --ip 172.18.0.11 -v /usr/soft/mysql-slave/data:/var/lib/mysql:rw -v /usr/soft/mysql-slave/log:/var/log/mysql:rw -v /usr/soft/mysql-slave/config/my.cnf:/etc/mysql/my.cnf:rw -v /etc/localtime:/etc/localtime:ro --name mysql8-slave -d mysql
mf.cnf
###主从数据库配置核心部分 [mysqld] # 设置同步的binary log二进制日志文件名前缀,默认是binlog log-bin=mysql-bin # 服务器唯一id,默认为1,值范围为1~2^32−1. ;主数据库和从数据库的server-id不能重复 server-id=2 ###可选配置 # 需要主从复制的数据库 ,如多个则重复配置 replicate-do-db=test # 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步) ,如多个则重复配置 binlog-ignore-db=mysql # 为每个session分配的内存,在事务过程中用来存储二进制日志的缓存 binlog_cache_size=1M # 主从复制的格式(mixed,statement,row,默认格式是statement。建议是设置为row,主从复制时数据更加能够统一) binlog_format=row # 配置二进制日志自动删除/过期时间,单位秒,默认值为2592000,即30天;8.0.3版本之前使用expire_logs_days,单位天数,默认值为0,表示不自动删除。 binlog_expire_logs_seconds=2592000 # 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断,默认OFF关闭,可选值有OFF、all、ddl_exist_errors以及错误码列表。8.0.26版本之前使用slave_skip_errors # 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 replica_skip_errors=1062 # relay_log配置中继日志,默认采用 主机名-relay-bin 的方式保存日志文件 relay_log=replicas-mysql-relay-bin # log_replica_updates表示slave是否将复制事件写进自己的二进制日志,默认值ON开启;8.0.26版本之前使用log_slave_updates log_slave_updates=ON # 防止改变数据(只读操作,除了特殊的线程) read_only=ON
开启
SHOW MASTER STATUS;
CHANGE REPLICATION SOURCE TO SOURCE_HOST='172.18.0.10', SOURCE_PORT=3306, SOURCE_USER='repl', SOURCE_PASSWORD='123456', SOURCE_LOG_FILE='mysql-bin.000001', SOURCE_LOG_POS=2704;
## 开启 START REPLICA; ## 关闭 STOP REPLICA;
SHOW REPLICA STATUS;
假如显示 Slave_IO_Running/Replica_IO_Running和Slave_SQL_Running/Replica_SQL_Running 为 Yes
以及Slave_IO_State/Replica_IO_State 为 Waiting for master to send event/Waiting for source to send event
则证明主从复制成功