MacOS使用Docker創(chuàng)建MySQL主從數(shù)據(jù)庫的方法
一、拉取MySQL鏡像
通過終端獲取最新的MySQL鏡像
docker pull mysql/mysql-server
二、創(chuàng)建MySQL數(shù)據(jù)庫容器配置文件對應(yīng)目錄
我們在當(dāng)前用戶下創(chuàng)建一組目錄,用來存放MySQL容器配置文件,(Linux下可以省略此步驟)參考下圖:
注意:MySQL8版本以后,需要在映射文件中加入 mysql-files,否則MySQL數(shù)據(jù)庫容器會創(chuàng)建失敗。
因為在MacOS下不支持vi/vim 直接修改my.cnf文件,也不支持apt-get安裝vim,所以需要在本地新建兩個my.cnf映射文件。(Linux下可以通過vim直接修改配置文件)
master主庫對應(yīng)的my.cnf配置文件為:
[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從庫對應(yīng)的my.cnf配置文件為:
[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
三、創(chuàng)建兩個MySQL數(shù)據(jù)庫容器
創(chuàng)建master主數(shù)據(jù)庫容器
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
創(chuàng)建slave從數(shù)據(jù)庫容器
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容器創(chuàng)建成功
此時我們打開Docker儀表板可以看到,兩個容器已經(jīng)運行起來了。而且端口就是我們之前創(chuàng)建的對應(yīng)端口
我們通過Navicat連接會報哦1130錯誤,是因為所連接的用戶賬戶沒有遠(yuǎn)程連接的權(quán)限。需要更改mysql數(shù)據(jù)庫里的user表里的host項
把localhost改成%
具體步驟:
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)
四、主從數(shù)據(jù)庫配置
master主數(shù)據(jù)庫配置:
//進(jìn)入master主數(shù)據(jù)容器 docker exec -it mysql-master mysql -uroot -p123456 //創(chuàng)建一個用戶來同步數(shù)據(jù),每個slave使用標(biāo)準(zhǔn)的MySQL用戶名和密碼連接master。進(jìn)行復(fù)制操作的用戶會授予REPLICATION SLAVE 權(quán)限。mysql8 之前的版本中加密規(guī)則是mysql_native_password,而在mysql8之后,加密規(guī)則是caching_sha2_password CREATE USER 'slave'@'%' IDENTIFIED BY '123456';(這樣有可能在slave創(chuàng)建與master連接時報錯) 或 CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; //對用戶進(jìn)行授權(quán) GRANT REPLICATION SLAVE ON *.* to 'slave'@'%'; //查看狀態(tài),記住File、Position的值,在Slave中將用到 show master status; //查詢master容器的IP,會在slave設(shè)置主庫連接時用到 docker inspect mysql-master | grep IPA;
mster的狀態(tài),F(xiàn)ile mysql-bin.000003 Position 661
slave從數(shù)據(jù)庫配置:
//進(jìn)入slave從數(shù)據(jù)容器 docker exec -it mysql-slave mysql -uroot -p123456 //設(shè)置主庫鏈接 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; //查看狀態(tài) show slave status\G; //如果 show slave status\G命令結(jié)果中出現(xiàn): //Slave_IO_Running: Yes //Slave_SQL_Running: Yes //以上兩項都為Yes,那說明沒問題了。 //否則,從新配置從數(shù)據(jù) stop slave; reset slave all;
啟動從庫同步成功
五、主從驗證
我們在master上創(chuàng)建一個數(shù)據(jù)庫,然后創(chuàng)建一張表,再插入一條數(shù)據(jù),相應(yīng)的slave也會增加;
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;
在執(zhí)行命令之前,主從數(shù)據(jù)庫數(shù)量相同;
master執(zhí)行命令之后slave增加對應(yīng)數(shù)據(jù)
可以發(fā)現(xiàn)主庫新增的數(shù)據(jù)已經(jīng)同步過來了,MySQL的主從復(fù)制就設(shè)置完成了。(測試環(huán)境,MacOS M1 ARM64機(jī)器,Docker,MySQL 8.0.27)
到此這篇關(guān)于MacOS使用Docker創(chuàng)建MySQL主從數(shù)據(jù)庫的文章就介紹到這了,更多相關(guān)Docker創(chuàng)建MySQL主從數(shù)據(jù)庫內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。