MacOS使用Docker創建MySQL主主數據庫
- 2021 年 12 月 28 日
- 筆記
主從同步配置可以參考上一篇MacOS使用Docker創建MySQL主從數據庫
一、創建MySQL數據庫容器配置文件對應目錄
我們在當前用戶下創建一組目錄,用來存放MySQL容器配置文件,(Linux下可以省略此步驟)參考下圖:
二、主主配置文件
mone對應的my.cnf配置文件為
[mysqld] server_id = 1 log-bin= mysql-bin replicate-ignore-db=mysql replicate-ignore-db=sys replicate-ignore-db=information_schema replicate-ignore-db=performance_schema read-only=0 relay_log=mysql-relay-bin log-slave-updates=on auto-increment-offset=1 auto-increment-increment=2
mtwo對應的my.cnf配置文件為
[mysqld] server_id = 2 log-bin= mysql-bin replicate-ignore-db=mysql replicate-ignore-db=sys replicate-ignore-db=information_schema replicate-ignore-db=performance_schema read-only=0 relay_log=mysql-relay-bin log-slave-updates=on auto-increment-offset=2 auto-increment-increment=2
三、創建兩個MySQL數據庫容器
創建mone數據庫容器
docker run --name monemysql -d -p 3317:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /Users/yumaster/test/mysql_doublemaster/mone/data:/var/lib/mysql -v /Users/yumaster/test/mysql_doublemaster/mone/conf/my.cnf:/etc/mysql/my.cnf -v /Users/yumaster/test/mysql_doublemaster/mone/mysql-files:/var/lib/mysql-files mysql/mysql-server
創建mtwo數據庫容器
docker run --name mtwomysql -d -p 3318:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /Users/yumaster/test/mysql_doublemaster/mtwo/data:/var/lib/mysql -v /Users/yumaster/test/mysql_doublemaster/mtwo/conf/my.cnf:/etc/mysql/my.cnf -v /Users/yumaster/test/mysql_doublemaster/mtwo/mysql-files:/var/lib/mysql-files mysql/mysql-server
此時我們打開Docker儀錶板可以看到,兩個容器已經運行起來了。而且端口就是我們之前創建的對應端口
四、主主數據庫配置
mone 數據庫容器配置:
//進入mone容器 docker exec -it monemysql mysql -u root -p123456 //創建一個用戶來同步數據,每個slave使用標準的MySQL用戶名和密碼連接master。進行複製操作的用戶會授予REPLICATION SLAVE 權限。mysql8 之前的版本中加密規則是mysql_native_password,而在mysql8之後,加密規則是caching_sha2_password CREATE USER 'slave'@'%' IDENTIFIED BY '123456';(這樣有可能在slave創建與master連接時報錯) 或 CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; //對用戶進行授權 GRANT REPLICATION SLAVE ON *.* to 'slave'@'%'; //查看狀態,記住File、Position的值,在mtwo中將用到 show master status; //查詢mone容器的IP,會在slave設置主庫連接時用到 docker inspect monemysql | grep IPA;
mtwo 數據庫容器配置:
//進入mone容器 docker exec -it mtwomysql mysql -u root -p123456 //設置主庫鏈接,master_host即為容器IP,master_log_file和master_log_pos即為在mone容器中,通過show master status查出來的值; change master to master_host='172.17.0.4',master_user='slave',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=661,master_port=3306; //創建一個用戶來同步數據,每個slave使用標準的MySQL用戶名和密碼連接master。進行複製操作的用戶會授予REPLICATION SLAVE 權限。mysql8 之前的版本中加密規則是mysql_native_password,而在mysql8之後,加密規則是caching_sha2_password CREATE USER 'slave'@'%' IDENTIFIED BY '123456';(這樣有可能在slave創建與master連接時報錯) 或 CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; //對用戶進行授權 GRANT REPLICATION SLAVE ON *.* to 'slave'@'%'; //啟動同步 start slave; //查看狀態 show master status;
設置完mtwo之後,再進入mone容器
//進入mone容器 docker exec -it monemysql mysql -u root -p123456 //設置mtwo主庫鏈接 change master to master_host='172.17.0.5',master_user='slave',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=661,master_port=3306; //啟動同步 start slave;
五、雙主配置驗證
在mone與mtwo容器中查看狀態:
show slave status\G;
當Slave_IO_Running與Slave_SQL_Running均為Yes,說明雙主配置成功;
無論在mone,還是在mtwo中創建數據庫,新增數據,兩邊都可以同步到數據
create database mone_demo; use mone_demo; create table userinfo(username varchar(50),age int); insert into userinfo values('Tom',18); select * from userinfo;