一、拉取mysql鏡像
通過終端獲取最新的mysql鏡像
docker pull mysql/mysql-server
二、創建mysql數據庫容器配置文件對應目錄
我們在當前用戶下創建一組目錄,用來存放mysql容器配置文件,(linux下可以省略此步驟)參考下圖:
注意:mysql8版本以后,需要在映射文件中加入 mysql-files,否則mysql數據庫容器會創建失敗。
因為在macos下不支持vi/vim 直接修改my.cnf文件,也不支持apt-get安裝vim,所以需要在本地新建兩個my.cnf映射文件。(linux下可以通過vim直接修改配置文件)
master主庫對應的my.cnf配置文件為:
1
2
3
4
5
6
7
8
|
[mysqld] server_id = 1 log-bin= mysql-bin read-only=0 replicate-ignore-db=mysql replicate-ignore-db=sys replicate-ignore-db=information_schema replicate-ignore-db=performance_schema |
slave從庫對應的my.cnf配置文件為:
1
2
3
4
5
6
7
8
|
[mysqld] server_id = 2 log-bin= mysql-bin read-only=1 replicate-ignore-db=mysql replicate-ignore-db=sys replicate-ignore-db=information_schema replicate-ignore-db=performance_schema |
三、創建兩個mysql數據庫容器
創建master主數據庫容器
docker run --name mysql-master -d -p 3307:3306 -e mysql_root_password=123456 -v /users/yumaster/test/mysql_master_slave/master/data:/var/lib/mysql -v /users/yumaster/test/mysql_master_slave/master/conf/my.cnf:/etc/mysql/my.cnf -v /users/yumaster/test/mysql_master_slave/master/mysql-files:/var/lib/mysql-files mysql/mysql-server
創建slave從數據庫容器
docker run --name mysql-slave -d -p 3308:3306 -e mysql_root_password=123456 -v /users/yumaster/test/mysql_master_slave/slave/data:/var/lib/mysql -v /users/yumaster/test/mysql_master_slave/slave/conf/my.cnf:/etc/mysql/my.cnf -v /users/yumaster/test/mysql_master_slave/slave/mysql-files:/var/lib/mysql-files mysql/mysql-server
如下圖,說明兩個mysql容器創建成功
此時我們打開docker儀表板可以看到,兩個容器已經運行起來了。而且端口就是我們之前創建的對應端口
我們通過navicat連接會報哦1130錯誤,是因為所連接的用戶賬戶沒有遠程連接的權限。需要更改mysql數據庫里的user表里的host項
把localhost改成%
具體步驟:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
mysql> use mysql reading table information for completion of table and column names you can turn off this feature to get a quicker startup with -a database changed mysql> select host from user where user = 'root' ; + -----------+ | host | + -----------+ | localhost | + -----------+ 1 row in set (0.01 sec) mysql> update user set host= '%' where user = 'root' ; query ok, 1 row affected (0.01 sec) rows matched: 1 changed: 1 warnings: 0 mysql> select host from user where user = 'root' ; + ------+ | host | + ------+ | % | + ------+ 1 row in set (0.00 sec) mysql> flush privileges ; query ok, 0 rows affected (0.01 sec) |
四、主從數據庫配置
master主數據庫配置:
1
2
3
4
5
6
7
8
9
10
11
12
|
//進入master主數據容器 docker exec -it mysql-master mysql -uroot -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的值,在slave中將用到 show master status; //查詢master容器的ip,會在slave設置主庫連接時用到 docker inspect mysql-master | grep ipa; |
mster的狀態,file mysql-bin.000003 position 661
slave從數據庫配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//進入slave從數據容器 docker exec -it mysql-slave mysql -uroot -p123456 //設置主庫鏈接 change master to change master to master_host= '172.17.0.2' ,master_user= 'slave' ,master_password= '123456' ,master_log_file= 'mysql-bin.000003' ,master_log_pos=661,master_port=3306; //啟動從庫同步 start slave; //查看狀態 show slave status\g; //如果 show slave status\g命令結果中出現: //slave_io_running: yes //slave_sql_running: yes //以上兩項都為yes,那說明沒問題了。 //否則,從新配置從數據 stop slave; reset slave all ; |
啟動從庫同步成功
五、主從驗證
我們在master上創建一個數據庫,然后創建一張表,再插入一條數據,相應的slave也會增加;
1
2
3
4
5
|
create database master_slave_demo; use master_slave_demo; create table userinfo(username varchar (50),age int ); insert into userinfo values ( 'toulon' ,25); select * from userinfo; |
在執行命令之前,主從數據庫數量相同;
master執行命令之后slave增加對應數據
可以發現主庫新增的數據已經同步過來了,mysql的主從復制就設置完成了。(測試環境,macos m1 arm64機器,docker,mysql 8.0.27)
到此這篇關于macos使用docker創建mysql主從數據庫的文章就介紹到這了,更多相關docker創建mysql主從數據庫內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://www.cnblogs.com/yumaster/p/15737546.html