环境描述:
现在在205机器有一个MYSQL生产服务,以及204机器dokcer服务
目标:
在204机器的DOCKER中搭建3台MYSQL8从机,与205的MYSQL5.5.27主机同步,并对齐所有业务数据
架构变更说明:

执行:
1在docker中离线安装MYSQL8.0.22版本作为从机MYSQL版本
2配置每个docker MSYQL8容器数据目录
在/home/docker/mysql建3个文件夹/slave3308/slave3309/slave3310
每个slave文件夹下创建data,config,mysql-files目录
并在config写入my.cnf配置文件,配置如下
[mysqld]
server-id = 2 # 节点ID,确保唯一
log-bin=mysql-bin #开启mysql的binlog日志功能
relay-log = mysql-relay-bin #relay-log中继日志是连接master和slave的核心
#需要同步的3个库
replicate_wild_do_table=db1.%
replicate_wild_do_table=db1.%
replicate_wild_do_table=db1.%
#需要ignore的库和表
replicate-wild-ignore-table=information_schema.% #屏蔽无用数据库以及系统库
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=performance_schema.%
replicate-wild-ignore-table=db1.temp_statisic #dmp中间表不需要同步
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
3创建docker容器
docker run --name slave3310 -p 3310:3310 -v /home/docker/mysql/slave3310:/etc/mysql -v /home/docker/mysql/slave3310/logs:/var/log/mysql -v /home/docker/mysql/slave3310/data:/var/lib/mysql -v /home/docker/mysql/slave3310/config/my.cnf:/etc/mysql/my.cnf -v /home/docker/mysql/slave3310/mysql-files:/var/lib/mysql-files/ -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.22
4主机配置文件添加如下配置
#mysql master1 config
[mysqld]
server-id = 1 # 节点ID,确保唯一
# log config
log-bin = mysql-bin #开启mysql的binlog日志功能
sync_binlog = 100 #控制数据库的binlog刷到磁盘上去 , 0 不控制,性能最好,1每次事物提交都会刷到日志文件中,性能最差,最安全sync_binlog>0,表示每sync_binlog次事务提交
binlog_format = mixed #binlog日志格式,mysql默认采用statement,建议使用mixed-statement和row结合
expire_logs_days = 7 #binlog过期清理时间
max_binlog_size = 512m #binlog每个日志文件大小
binlog_cache_size = 4m #binlog缓存大小
max_binlog_cache_size= 512m #最大binlog缓存大
binlog-ignore-db=mysql,information_schema,performance_schema #不生成日志文件的数据库,多个忽略数据库可以用逗号拼接,或者 复制这句话,写多行
auto-increment-offset = 1 # 自增值的偏移量
auto-increment-increment = 1 # 自增值的自增量
slave-skip-errors = all #跳过从库错误
5重启3从1主让配置生效
6主机5.5.27创建用户并授权从机访问。
CREATE USER slave IDENTIFIED BY 'slave';
grant replication slave on *.* to 'slave'@'xx.xx.xx.xx' identified by 'slave';
FLUSH PRIVILEGES;
7查看master的状态
how master status;
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set
|+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000005 120| | mysql | |
+------------------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)
8采用mysqldump备份主库数据
全量备份db1和db2两个库
mysqldump db1 -h xx.xx.xx.205 -uroot -p >/tmp/db1.sql
mysqldump db2 -h xx.xx.xx.205 -uroot -p >/tmp/db2.sql
9从库分别进入docker创建对应数据库
CREATE DATABASE IF NOT EXISTS db1 DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE DATABASE IF NOT EXISTS db2 DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;
10从库数据导入
docker cp dir1 容器ID:/dir2
将导出的/tmp/下的db1.sql,db2.sql分别导入容器
分别进入从机数据库执行source导入数据
11.配置从库
mysql> stop slave;
CHANGE MASTER TO
MASTER_HOST = 'xx.xx.xx.205',
MASTER_USER = 'slave',
MASTER_PASSWORD = 'slave',
MASTER_PORT = 3306,
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154,
MASTER_RETRY_COUNT = 60,
MASTER_HEARTBEAT_PERIOD = 10000; #毫秒
# MASTER_LOG_FILE='mysql-bin.000005',#与主库File 保持一致
# MASTER_LOG_POS=120 , #与主库Position 保持一致
12.启动从库slave进程
start slave;
13.分别进入从库查看同步状态
show slave status \G
863

被折叠的 条评论
为什么被折叠?



