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;

 

相關文章