創建mysql配置文件:my.cnf
主庫配置:
[client]
## 默認編碼格式
default-character-set=utf8mb4
[mysqld]
## 設置server-id,同一局域網中需要唯一
server-id=101
## 設置編碼格式
character-set-server=utf8mb4
## 允許最大連接數
max_connections=2000
## 是否區分表名大小寫 0區分 1不區分
lower_case_table_names=1
## 指定不需要同步的數據庫名稱
binlog-ignore-db=mysql,information_schema,performance_schema,sys
## 開啟二進制日志功能
log-bin=mall-mysql-bin
## 設置二進制日志使用內存大小(事務)
binlog_cache_size=1M
## 設置使用的二進制日志格式(mixed,statement,row)
binlog_format=mixed
## 二進制日志過期清理時間。默認值為0,表示不自動清理。
expire_logs_days=7
## 跳過主從復制中遇到的所有錯誤或指定類型的錯誤,避免slave端復制中斷。
## 如:1062錯誤是指一些主鍵重復,1032錯誤是因為主從數據庫數據不一致
slave_skip_errors=1062## 通用日志
general_log=ON
log_output=FILE,TABLE## 慢查詢日志
slow_query_log=ON
## 超過1秒的sql記錄
long_query_time=1
主庫啟動:
docker run -itd \
--name mysql-master \
-p 3306:3306 \
--restart unless-stopped \
-v /home/mysql-master/log:/var/log/mysql \
-v /home/mysql-master/data:/var/lib/mysql \
-v /home/mysql-master/conf:/etc/mysql/conf.d \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.0.31
創建備份賬號:
CREATE USER 'masterSlave'@'%' IDENTIFIED WITH mysql_native_password BY 'ms123456';
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'masterSlave'@'%';
FLUSH PRIVILEGES;
從庫配置:
## 默認編碼格式
[client]
default-character-set=utf8mb4
[mysqld]
## 設置server-id,同一局域網中需要唯一
server-id=102
## 設置編碼格式
character-set-server=utf8mb4
## 是否對sql語句大小寫敏感,1表示不敏感
lower_case_table_names=1
## 允許最大連接數
max_connections=2000
## 指定不需要同步的數據庫名稱
binlog-ignore-db=mysql,information_schema,performance_schema,sys
## 開啟二進制日志功能,以備Slave作為其它數據庫實例的Master時使用
log-bin=mall-mysql-slave-bin
## 設置二進制日志使用內存大小(事務)
binlog_cache_size=1M
## 設置使用的二進制日志格式(mixed,statement,row)
binlog_format=mixed
## 二進制日志過期清理時間。默認值為0,表示不自動清理。
expire_logs_days=7
## 跳過主從復制中遇到的所有錯誤或指定類型的錯誤,避免slave端復制中斷。
## 如:1062錯誤是指一些主鍵重復,1032錯誤是因為主從數據庫數據不一致
slave_skip_errors=1062
## relay_log配置中繼日志
relay_log=mall-mysql-relay-bin
## log_slave_updates表示slave將復制事件寫進自己的二進制日志
log_slave_updates=1
## slave設置為只讀(具有super權限的用戶除外)
read_only=1## 通用日志
general_log=ON
log_output=FILE,TABLE## 慢查詢日志
slow_query_log=ON
## 超過1秒的sql記錄
long_query_time=1
從庫1啟動:
docker run -itd \
--name mysql-slave1 \
-p 3307:3306 \
--restart unless-stopped \
-v /home/mysql-slave1/log:/var/log/mysql \
-v /home/mysql-slave1/data:/var/lib/mysql \
-v /home/mysql-slave1/conf:/etc/mysql/conf.d \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.0.31
從庫2啟動:
docker run -itd \
--name mysql-slave2 \
-p 3308:3306 \
--restart unless-stopped \
-v /home/mysql-slave2/log:/var/log/mysql \
-v /home/mysql-slave2/data:/var/lib/mysql \
-v /home/mysql-slave2/conf:/etc/mysql/conf.d \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.0.31
當前數據庫被當做slave時有用
replicate-do-db
replicate-ignore-db
查看bin-log文件名和位置
show variables like 'log_%';
SHOW MASTER STATUS;
執行sql:
change master to master_host='172.17.222.108',master_user='masterSlave',master_password='ms123456',master_port=3306,master_log_file='mall-mysql-bin.000003',master_log_pos=157,master_connect_retry=30;
開啟從庫:
start slave;
show slave status;