0. 配置說(shuō)明
宿主機(jī)使用的版本為19045
的win10專(zhuān)業(yè)版,MySQL使用的是8.0+,Docker容器使用Linux。
1. 安裝Docker Desktop
- 略
修改Docker默認(rèn)安裝路徑
安裝包自己就提供了修改安裝路徑的功能,CMD中運(yùn)行:
“Docker Desktop Installer.exe” install --installation-dir=
--installation-dir=<path>
: changes the default installation location (C:\Program Files\Docker\Docker
)
2. 在Docker中安裝MySQL
可以訪(fǎng)問(wèn) MySQL 鏡像庫(kù)地址:https://hub.docker.com/_/mysql?tab=tags 查看可用的其他mysql版本,默認(rèn)為最新版本mysql:latest
2.1 拉取MySQL鏡像
$ docker pull mysql:latest
2.2 查看本地鏡像
$ docker images
2.3 啟動(dòng)MySQL容器實(shí)例
$ docker run --name mysql -p 3309:3306 -e MYSQL_ROOT_PASSWORD=5508769123 -d mysql
參數(shù)說(shuō)明:
- docker run:告訴Docker啟動(dòng)一個(gè)新的容器
- –name mysql :指定了容器的名稱(chēng),這里是 “mysql”
- -p 3309:3306:端口映射設(shè)置,將容器內(nèi)的MySQL數(shù)據(jù)庫(kù)端口(默認(rèn)為3306)映射到主機(jī)上的3309端口。這樣可以通過(guò)主機(jī)的3309端口訪(fǎng)問(wèn)MySQL服務(wù)器
- -e MYSQL_ROOT_PASSWORD=5508769123:環(huán)境變量的設(shè)置,用于配置MySQL容器的根用戶(hù)(root)的密碼。這里,密碼被設(shè)置為 “5508769123”
- -d:表示以"后臺(tái)"(detached)模式運(yùn)行容器
- mysql:要運(yùn)行的Docker鏡像的名稱(chēng)
下面給出的輸出16821a8792a185997c1b5df334fa4461a157488e90d881902596e7ff3db8c42f
為容器的id。
2.4 檢查安裝
$ docker ps
打開(kāi)Docker Desktop檢查
宿主機(jī)登錄Docker中的MySQL:
3. 主從復(fù)制
3.1 設(shè)置主庫(kù)(這里為宿主機(jī)器)
-
修改主庫(kù)MySQL數(shù)據(jù)庫(kù)的配置文件,這里配置文件位置為:
C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
添加信息為:
[mysqld] log-bin=mysql-bin #必須啟用二進(jìn)制日志 server-id=100 #必須服務(wù)器唯一ID
找到[mysqld]標(biāo)簽然后添加下面兩行即可
-
重啟MySQL服務(wù)
(管理員權(quán)限)
$ net stop mysql80 $ net start mysql80
-
在主庫(kù)創(chuàng)建新用戶(hù)并賦權(quán)
登錄主庫(kù)然后執(zhí)行下面兩條指令:
CREATE USER 'mercurows'@'%' IDENTIFIED WITH caching_sha2_password BY '5508769123'; GRANT REPLICATION SLAVE , REPLICATION CLIENT ON *.* TO 'mercurows'@'%';
**注意:**mysql8 之前的版本中加密規(guī)則是mysql_native_password,而在mysql8之后,加密規(guī)則是caching_sha2_password。我們發(fā)現(xiàn)root的加密規(guī)則為caching_sha2_password,現(xiàn)在修改為mysql_native_password,
ALTER USER 'mercurows'@'%' IDENTIFIED WITH 'mysql_native_password' BY '5508769123';
解釋?zhuān)?/p>
-
CREATE USER
:創(chuàng)建一個(gè)新用戶(hù)。 -
'mercurows'@'%'
:新用戶(hù)的標(biāo)識(shí)符。'mercurows'
是用戶(hù)名,'%'
表示這個(gè)用戶(hù)可以從任何主機(jī)連接到MySQL服務(wù)器。如果想限制用戶(hù)只能從特定主機(jī)連接,可以在'%'
的位置指定相應(yīng)的主機(jī)地址。 -
IDENTIFIED WITH caching_sha2_password BY '5508769123'
:用戶(hù)的身份驗(yàn)證方法和密碼。在這里用戶(hù)的身份驗(yàn)證方法被設(shè)置為caching_sha2_password
,并且密碼被設(shè)置為'5508769123'
。注意:mysql8 之前的版本中加密規(guī)則是mysql_native_password,而在mysql8之后,加密規(guī)則是caching_sha2_password。 -
REPLICATION SLAVE, REPLICATION CLIENT
:表示授予用戶(hù) ‘mercurows’ 兩種權(quán)限:REPLICATION SLAVE
(用于復(fù)制從其他MySQL服務(wù)器)和REPLICATION CLIENT
(用于查詢(xún)和管理復(fù)制狀態(tài))。 -
ON *.*
:表示授予權(quán)限的范圍,*.*
表示所有數(shù)據(jù)庫(kù)和所有表。 -
TO 'mercurows'@'%'
:這部分指定了要授予權(quán)限的用戶(hù)和其訪(fǎng)問(wèn)主機(jī)。與前一個(gè)命令相同,'mercurows'@'%'
表示 ‘mercurows’ 用戶(hù)可以從任何主機(jī)連接。
檢查:
flush privileges; SHOW GRANTS FOR 'mercurows'@'%';
-
-
檢查主庫(kù)狀態(tài)
show master status;
并記錄File
與Position
這兩個(gè)記錄,這里是DESKTOP-UPK0D57-bin.000038
與1353
,注意:在完成設(shè)置之前都不能對(duì)主庫(kù)進(jìn)行操作以免這兩個(gè)記錄發(fā)生改變。
3.2 設(shè)置從庫(kù)(這里為Docker中的MySQL)
-
修改從庫(kù)MySQL數(shù)據(jù)庫(kù)的配置文件,這里文件在
/etc/my.cnf
中添加信息為:
[mysqld] server-id=100 #必須服務(wù)器唯一ID
找到[mysqld]標(biāo)簽然后添加下面一行然后保存即可
-
重啟MySQL服務(wù)(我這里直接重啟容器了)
-
登錄從庫(kù)中的MySQL然后執(zhí)行下面的語(yǔ)句:
change master to master_host='192.168.1.172',master_port=3306,master_user='mercurows',master_password='5508769123',master_log_file='DESKTOP-UPK0D57-bin.000038',master_log_pos=1353; start slave;
解釋?zhuān)?/p>
-
change master to
:告訴MySQL服務(wù)器,接下來(lái)要更改主從復(fù)制的設(shè)置 -
master_host='192.168.1.172'
:指定主數(shù)據(jù)庫(kù)的主機(jī)名或IP地址。在這里就是我宿主電腦的IP地址 -
master_port=3306
:指定主數(shù)據(jù)庫(kù)的端口號(hào)。默認(rèn)情況下,MySQL的端口號(hào)是3306 -
master_user='mercurows'
:指定連接到主數(shù)據(jù)庫(kù)的用戶(hù)名,這里用戶(hù)名是mercurows
。這個(gè)就是上面主數(shù)據(jù)庫(kù)中剛剛創(chuàng)建的用戶(hù) -
master_password='5508769123'
:這是指定連接到主數(shù)據(jù)庫(kù)的用戶(hù)的密碼,這里密碼是5508769123
-
master_log_file='DESKTOP-UPK0D57-bin.000038'
:這是指定主數(shù)據(jù)庫(kù)上用于復(fù)制的二進(jìn)制日志文件的名稱(chēng)。在主從復(fù)制中,主數(shù)據(jù)庫(kù)會(huì)將更改記錄在二進(jìn)制日志文件中,從數(shù)據(jù)庫(kù)會(huì)從這些文件中讀取并應(yīng)用這些更改。而這個(gè)日志名稱(chēng)在上面的3.1中的4.檢查主庫(kù)狀態(tài)中得出 -
master_log_pos=1353
:這是指定從哪個(gè)位置開(kāi)始讀取主數(shù)據(jù)庫(kù)的二進(jìn)制日志文件。而這個(gè)位置在上面的3.1中的4.檢查主庫(kù)狀態(tài)中得出
-
-
檢查
show slave status \G;
slave機(jī)器上有兩個(gè)關(guān)鍵的進(jìn)程,必須兩個(gè)都要顯示為 Y E S YES YES,一個(gè)是Slave_IO_Running:,一個(gè)是Slave_SQL_Running:一個(gè)負(fù)責(zé)與主機(jī)的io通信,一個(gè)負(fù)責(zé)自己的slave mysql進(jìn)程。
3.3 測(cè)試
初始數(shù)據(jù)庫(kù)情況:
mysql
–主庫(kù),slave
–從庫(kù)
- 在主庫(kù)中創(chuàng)建testdatabase數(shù)據(jù)庫(kù)然后刷新從庫(kù):
- 在主庫(kù)創(chuàng)建
user
表并刷新從庫(kù)
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-822067.html
經(jīng)測(cè)試,對(duì)主庫(kù)的增刪改均能同步到從庫(kù)中。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-822067.html
參考
- 如何在Windows上更改Docker的默認(rèn)安裝路徑?
- docker搭建mysql8主從復(fù)制(一主一從)
到了這里,關(guān)于Docker搭建MySQL8.0主從復(fù)制(一主一從)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!