实现方案就是把两台mysql都可读写,互为主备,主机A->主机B备份,主机B->主机A备份
两个服务器上分别是:192.168.56.102(主)、192.168.56.105(主)
主主服务器mysql版本最好一致
在两台服务器上启动都启动好两个mysql
安装教程:Linux之centos7下docker 安装部署mysql8.0环境
安装教程:Linux之docker安装mysql8.0集群-主从部署实现
修改 Master 的配置文件/etc/my.cnf,在my.cnf文件中加入如下配置内容
[mysqld]
#必须唯一
server-id = 100
#开启及设置二进制日志文件名称
log_bin = mysql-bin
binlog_format = MIXED
sync_binlog = 1
#二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days =7
# binlog_cache_size = 128m
# max_binlog_cache_size = 512m
# max_binlog_size = 256M
# 要同步的数据库
# binlog-do-db = test
# 不需要同步的数据库
binlog-ignore-db = mysql
binlog_ignore_db = information_schema
binlog_ignore_db = performation_schema
binlog_ignore_db = sys
修改 slave 的配置文件/etc/my.cnf,在my.cnf文件中加入如下配置内容
#必须唯一
server-id = 101
#开启及设置二进制日志文件名称
log_bin = mysql-bin
binlog_format = MIXED
sync_binlog = 1
#二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days =7
# binlog_cache_size = 128m
# max_binlog_cache_size = 512m
# max_binlog_size = 256M
# 要同步的数据库
# binlog-do-db = test
# 不需要同步的数据库
binlog-ignore-db = mysql
binlog_ignore_db = information_schema
binlog_ignore_db = performation_schema
binlog_ignore_db = sys
docker restart mysql容器名称
docker exec -it mysql容器名称/id bash
mysql -uroot -p123456(密码)
slave
,密码:123456
#创建用户
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '123456';
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
mysql> CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
#分配权限
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';
#刷新权限
mysql> flush privileges;
SHOW MASTER STATUS
,记录二进制文件名(mysql-bin.000001)和位置(5778)注:如果要刷新日志文件可执行:reset master;
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+--------------------------------------------------+-------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+--------------------------------------------------+-------------------------------------------+
| mysql-bin.000001 | 5778 | | mysql,information_schema,performation_schema,sys | c7a674f5-3600-11eb-903c-0242ac110002:1-21 |
+------------------+----------+--------------+--------------------------------------------------+-------------------------------------------+
1 row in set (0.00 sec)
注意:MASTER_LOG_FILE和MASTER_LOG_POS要和主库查看出来状态对上
CHANGE MASTER TO
MASTER_HOST='192.168.56.102',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=5778;
mysql> start slave;
mysql> show slave status\G;
展示信息:
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.56.102
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 2638
Relay_Log_File: 13b2d81a26f9-relay-bin.000004
Relay_Log_Pos: 324
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
成功的标志:Slave_IO_Running: Yes和Slave_SQL_Running: Yes
这两个博客里有一些问题的解决方案:
Linux之centos7下docker 安装部署mysql8.0环境
Linux之docker安装mysql8.0集群-主从部署实现