腳本詳情
使用docker-compose安裝MySQL主從庫,文件架構如下:
image
- docker-compose.yml文件
version: '3'
services:
mysql-master:
container_name: mysql-master
hostname: mysql-master
image: "mysql:5.6"
ports:
- "33060:3306"
volumes:
- /usr/local/mysql-master/etc:/etc/mysql
- /usr/local/mysql-master/var/lib:/var/lib/mysql
- ./master/etc/my.cnf:/etc/my.cnf
- ./master/init_db/:/docker-entrypoint-initdb.d/
environment:
- TZ=Asia/Shanghai
- MYSQL_ROOT_PASSWORD=123456
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
restart: always
mysql-slave:
container_name: mysql-slave
hostname: mysql-slave
image: "mysql:5.6"
ports:
- "33070:3306"
volumes:
- /usr/local/mysql-slave/etc:/etc/mysql
- /usr/local/mysql-slave/var/lib:/var/lib/mysql
- ./slave/etc/my.cnf:/etc/my.cnf
- ./slave/init_db/:/docker-entrypoint-initdb.d/
environment:
- TZ=Asia/Shanghai
- MYSQL_ROOT_PASSWORD=123456
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
restart: always
- Master
- 2.1 配置文件(/etc/my.cnf)
#my.conf
[mysqld]
server_id = 1
# 開啟GTID模式
gtid-mode = ON
enforce-gtid-consistency = 1
# 復制過濾:也就是指定哪個數據庫不用同步(mysql庫一般不同步)
binlog-ignore-db = mysql
# 開啟二進制日志功能,可以隨便取,最好有含義(關鍵就是這里了)
log-bin = mysql-bin
# 為每個session 分配的內存,在事務過程中用來存儲二進制日志的緩存
binlog_cache_size = 1M
# 主從復制的格式(mixed,statement,row,默認格式是statement)
binlog_format = mixed
# 二進制日志自動刪除/過期的天數。默認值為0,表示不自動刪除。
expire_logs_days = 7
# 跳過主從復制中遇到的所有錯誤或指定類型的錯誤,避免slave端復制中斷。
# 如:1062錯誤是指一些主鍵重復,1032錯誤是因為主從數據庫數據不一致
slave_skip_errors = 1062
# log_slave_updates表示slave將復制事件寫進自己的二進制日志
log_slave_updates = ON
- 2.2 初始化腳本(init_db/init.sql)
create user 'repl'@'%' identified by 'repl';
grant replication client,replication slave on *.* to 'repl'@'%';
- Slave
- 3.1 配置文件(/etc/my.cnf)
#my.conf
[mysqld]
server_id = 2
gtid-mode = ON
enforce-gtid-consistency = 1
binlog-ignore-db = mysql
log-bin = mysql-slave1-bin
binlog_cache_size = 1M
binlog_format = mixed
expire_logs_days = 7
slave_skip_errors = 1062
relay_log = mysql-relay-bin
log_slave_updates = ON
read_only = 1
- 3.2 初始化腳本(init_db/init.sql)
reset master;
select sleep(10); ## 第一次出現了mysql-slave先初始化好的情況
CHANGE MASTER TO MASTER_HOST='mysql-master',MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_PORT=3306,MASTER_AUTO_POSITION=1;
start slave;
安裝方法
在mysql路徑下,執行命令行,即可完成安裝。
docker-compose up -d
驗證方法
- 查看容器是否正常啟動。
docker ps -a
image
- 進入主庫所對應的容器。
docker exec -ti <容器id> /bin/bash
進入數據庫,
mysql -u root -p 123456
并新建數據庫和表,插入測試數據。
create test;
use test;
create table t(id int,k int);
insert into t values(1,1),(2,3);
- 進入從庫所對應的容器進行查看,進入數據庫后,查詢表。
use t;
select * from t;
image
如果看到如圖所示數據,則主從庫安裝成功。
或者看到如下信息,也代表主從庫配置成功。
image
添加從庫只讀用戶
為保證從庫只從主庫同步,現設置從庫的只讀用戶。
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT SELECT ON dp_dorado.* TO 'slave'@'%';
FLUSH PRIVILEGES;