基于Docker的Mysql主備搭建的實(shí)現(xiàn)步驟
Docker mysql主從配置。我們會(huì)在一臺(tái)centos的虛擬機(jī)上,配置mysql主備
前期規(guī)劃:
- docker mysql版本 mysql:5.7
- docker網(wǎng)絡(luò)配置,我們會(huì)創(chuàng)建名稱為mysql的網(wǎng)絡(luò),子網(wǎng)掩碼為 172.88.0.0/16
- docker mysql主對(duì)應(yīng)的容器名稱:mysql-master, ip地址:172.88.0.11,映射端口:3307,文件卷配置(配置文件和數(shù)據(jù)文件持久化)mysql配置文件地址:/usr/local/docker/mysql/slave/conf,mysql數(shù)據(jù)文件地址:/usr/local/docker/mysql/slave/data
- docker mysql從對(duì)應(yīng)的容器名稱:mysql-slave, ip地址: 172.88.0.12,映射端口:3308,文件卷配置(配置文件和數(shù)據(jù)文件持久化)mysql配置文件地址:/usr/local/docker/mysql/master/conf,mysql數(shù)據(jù)文件地址:/usr/local/docker/mysql/master/data
配置過(guò)程:
網(wǎng)絡(luò)創(chuàng)建(兩個(gè)mysql之間是需要通信的)
# 創(chuàng)建網(wǎng)絡(luò)mysql,子網(wǎng)掩碼172.88.0.0/16 [root@localhost conf]# docker network create mysql --subnet 172.88.0.0/16 # 查看網(wǎng)絡(luò)是否創(chuàng)建成功:有mysql則表示創(chuàng)建成功 [root@localhost conf]# docker network ls NETWORK ID ? ? NAME ? ? ?DRIVER ? ?SCOPE b03fab4e1371 ? bridge ? ?bridge ? ?local 0abda6b25a0e ? host ? ? ?host ? ? ?local 844e3f85e00e ? mysql ? ? bridge ? ?local c2bbcb4013a7 ? none ? ? ?null ? ? ?local
拉取docker mysql鏡像,這里我們使用的是mysql:5.7版本
# 拉取docker鏡像,mysql:5.7版本 [root@localhost ~]# docker pull mysql:5.7
啟動(dòng)兩個(gè)mysql容器,mysql-master,mysql-slave
# 記得修改下conf的配置文件 # chmod -R 777 /usr/local/docker/mysql/master/conf # chmod -R 777 /usr/local/docker/mysql/slave/conf # 啟動(dòng)容器,一個(gè)對(duì)應(yīng)主,一個(gè)對(duì)應(yīng)從 # mysql master [mysql-master, 3307,172.88.0.11,/usr/local/docker/mysql/master/data,/usr/local/docker/mysql/master/conf] [root@localhost /]# docker run --name mysql-master -p 3307:3306 -v /usr/local/docker/mysql/master/data:/var/lib/mysql -v /usr/local/docker/mysql/master/conf:/etc/mysql/ -e MYSQL_ROOT_PASSWORD=123456 -d --net mysql --ip 172.88.0.11 mysql:5.7 # mysql slave [mysql-slave, 3308,172.88.0.12,/usr/local/docker/mysql/slave/data,/usr/local/docker/mysql/slave/conf] [root@localhost /]# docker run --name mysql-slave -p 3308:3306 -v /usr/local/docker/mysql/slave/data:/var/lib/mysql -v /usr/local/docker/mysql/slave/conf:/etc/mysql/ -e MYSQL_ROOT_PASSWORD=123456 -d --net mysql --ip 172.88.0.12 mysql:5.7 # 查看mysql-master,mysql-slave兩個(gè)容器是否正確啟動(dòng) [root@localhost /]# docker ps CONTAINER ID ? IMAGE ? ? ? COMMAND ? ? ? ? ? ? ? ? ?CREATED ? ? ? ? ?STATUS ? ? ? ? ?PORTS ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?NAMES 205cd234c29b ? mysql:5.7 ? "docker-entrypoint.s…" ? 9 seconds ago ? ?Up 7 seconds ? ?33060/tcp, 0.0.0.0:3308->3306/tcp, :::3308->3306/tcp ? mysql-slave cdcc14b2b2a2 ? mysql:5.7 ? "docker-entrypoint.s…" ? 49 seconds ago ? Up 46 seconds ? 33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp ? mysql-master
mysql主備配置
# 修改配置文件 # mysql-master配置文件修改,因?yàn)槲覀冏隽薲ocker文件卷處理,所以我們直接在宿主機(jī)/usr/local/docker/mysql/master/conf下操作即可 [root@localhost ~]# cd /usr/local/docker/mysql/master/conf/ [root@localhost conf]# vi my.cnf? # 在my.cnf里面輸入如下信息 [mysqld] ## 同一局域網(wǎng)內(nèi)注意要唯一 server-id=100 ## 開啟二進(jìn)制日志功能,可以隨便?。P(guān)鍵) log-bin=mysql-bin # 進(jìn)入mysql-master容器里面重啟mysql服務(wù) # docker exec -it mysql-master /bin/bash 進(jìn)入mysql-master容器 # service mysql restart重啟mysql服務(wù)器 # 這里有一點(diǎn)要注意,重啟mysql服務(wù)之后,mysql-master容器被關(guān)掉了,所以我們需要docker start mysql-master在啟動(dòng)下容器 [root@localhost /]# docker exec -it mysql-master /bin/bash root@cdcc14b2b2a2:/# service mysql restart [root@localhost /]# docker start mysql-master # 再次進(jìn)入mysql-master容器授予slave用戶 REPLICATION SLAVE權(quán)限和REPLICATION CLIENT權(quán)限,用于在主從庫(kù)之間同步數(shù)據(jù)[slave用戶是用來(lái)做數(shù)據(jù)同步的] # 1. CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; # 2. GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; # 3. show master status; ?查看主庫(kù)狀態(tài),請(qǐng)記住File和Position對(duì)應(yīng)的值 [root@localhost /]# docker exec -it mysql-master /bin/bash root@205cd234c29b:/# mysql -u root -p ? ?? Enter password:? Welcome to the MySQL monitor. ?Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.7.36-log MySQL Community Server (GPL) Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; Query OK, 0 rows affected (0.04 sec) mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; Query OK, 0 rows affected (0.00 sec) mysql> show master status; +------------------+----------+--------------+------------------+-------------------+ | File ? ? ? ? ? ? | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000002 | ? ? ?617 | ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.01 sec) mysql>? # mysql-slave配置文件修改,因?yàn)槲覀冏隽薲ocker文件卷處理,所以我們直接在宿主機(jī)/usr/local/docker/mysql/slave/conf下操作即可 [root@localhost conf]# cd /usr/local/docker/mysql/slave/conf/ [root@localhost conf]# vi my.cnf? # 在my.cnf里面輸入如下信息 [mysqld] ## 設(shè)置server_id,注意要唯一 server-id=101 ## 開啟二進(jìn)制日志功能,以備Slave作為其它Slave的Master時(shí)使用 log-bin=mysql-slave-bin ## relay_log配置中繼日志 relay_log=edu-mysql-relay-bin # 進(jìn)入mysql-slave容器里面重啟mysql服務(wù) # docker exec -it mysql-slave /bin/bash 進(jìn)入mysql-master容器 # service mysql restart重啟mysql服務(wù)器 # 這里又一點(diǎn)要注意,重啟mysql服務(wù)之后,mysql-slave容器被關(guān)掉了,所以我們需要docker start mysql-slave在啟動(dòng)下容器 [root@localhost /]# docker exec -it mysql-slave /bin/bash root@205cd234c29b:/# service mysql restart [root@localhost /]# docker start mysql-slave # 再次進(jìn)入mysql-slave容器,連上mysql-slave數(shù)據(jù)庫(kù) [root@localhost /]# docker exec -it mysql-slave /bin/bash [root@localhost conf]# docker exec -it mysql-slave /bin/bash root@205cd234c29b:/# mysql -u root -p Enter password:? Welcome to the MySQL monitor. ?Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.36-log MySQL Community Server (GPL) Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> change master to master_host='172.88.0.11', master_port=3306, master_user='slave',master_password='123456',master_log_file='mysql-bin.000002', master_log_pos=617; Query OK, 0 rows affected, 2 warnings (0.06 sec) mysql> start slave; Query OK, 0 rows affected (0.02 sec) mysql> show slave status\G; *************************** 1. row *************************** ? ? ? ? ? ? ? ?Slave_IO_State: Waiting for master to send event ? ? ? ? ? ? ? ? ? Master_Host: 172.88.0.11 ? ? ? ? ? ? ? ? ? Master_User: slave ? ? ? ? ? ? ? ? ? Master_Port: 3306 ? ? ? ? ? ? ? ? Connect_Retry: 60 ? ? ? ? ? ? ? Master_Log_File: mysql-bin.000002 ? ? ? ? ? Read_Master_Log_Pos: 617 ? ? ? ? ? ? ? ?Relay_Log_File: edu-mysql-relay-bin.000002 ? ? ? ? ? ? ? ? Relay_Log_Pos: 320 ? ? ? ? Relay_Master_Log_File: mysql-bin.000002 ? ? ? ? ? ? ?Slave_IO_Running: Yes ? ? ? ? ? ? Slave_SQL_Running: Yes ? ? ? ? ? ? ? Replicate_Do_DB:? ? ? ? ? ? Replicate_Ignore_DB:? ? ? ? ? ? ?Replicate_Do_Table:? ? ? ? ?Replicate_Ignore_Table:? ? ? ? Replicate_Wild_Do_Table:? ? Replicate_Wild_Ignore_Table:? ? ? ? ? ? ? ? ? ? ?Last_Errno: 0 ? ? ? ? ? ? ? ? ? ?Last_Error:? ? ? ? ? ? ? ? ? ?Skip_Counter: 0 ? ? ? ? ? Exec_Master_Log_Pos: 617 ? ? ? ? ? ? ? Relay_Log_Space: 531 ? ? ? ? ? ? ? Until_Condition: None ? ? ? ? ? ? ? ?Until_Log_File:? ? ? ? ? ? ? ? ? Until_Log_Pos: 0 ? ? ? ? ? ?Master_SSL_Allowed: No ? ? ? ? ? ?Master_SSL_CA_File:? ? ? ? ? ? ?Master_SSL_CA_Path:? ? ? ? ? ? ? ? Master_SSL_Cert:? ? ? ? ? ? ? Master_SSL_Cipher:? ? ? ? ? ? ? ? ?Master_SSL_Key:? ? ? ? ? Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No ? ? ? ? ? ? ? ? Last_IO_Errno: 0 ? ? ? ? ? ? ? ? Last_IO_Error:? ? ? ? ? ? ? ? ?Last_SQL_Errno: 0 ? ? ? ? ? ? ? ?Last_SQL_Error:? ? Replicate_Ignore_Server_Ids:? ? ? ? ? ? ? ?Master_Server_Id: 100 ? ? ? ? ? ? ? ? ? Master_UUID: 46cc703d-5b0e-11ec-a43c-0242ac110002 ? ? ? ? ? ? ?Master_Info_File: /var/lib/mysql/master.info ? ? ? ? ? ? ? ? ? ? SQL_Delay: 0 ? ? ? ? ? SQL_Remaining_Delay: NULL ? ? ? Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates ? ? ? ? ? ?Master_Retry_Count: 86400 ? ? ? ? ? ? ? ? ? Master_Bind:? ? ? ? Last_IO_Error_Timestamp:? ? ? ?Last_SQL_Error_Timestamp:? ? ? ? ? ? ? ? ?Master_SSL_Crl:? ? ? ? ? ? ?Master_SSL_Crlpath:? ? ? ? ? ? ?Retrieved_Gtid_Set:? ? ? ? ? ? ? Executed_Gtid_Set:? ? ? ? ? ? ? ? ? Auto_Position: 0 ? ? ? ? ?Replicate_Rewrite_DB:? ? ? ? ? ? ? ? ? ?Channel_Name:? ? ? ? ? ? ?Master_TLS_Version:?
到此這篇關(guān)于基于Docker的Mysql主備搭建的實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān)Docker Mysql主備搭建內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Docker案例分析:搭建MySQL數(shù)據(jù)庫(kù)服務(wù)
- Docker搭建MySQL并掛載數(shù)據(jù)的全過(guò)程
- docker-compose搭建mongodb、mysql的詳細(xì)過(guò)程
- 基于Docker的MySQL主從復(fù)制環(huán)境搭建的實(shí)現(xiàn)步驟
- 詳解用Docker搭建外部可以訪問(wèn)的mysql
- docker搭建php+nginx+swoole+mysql+redis環(huán)境的方法
- 使用dockercompose搭建springboot-mysql-nginx應(yīng)用
- 如何使用?docker?搭建一個(gè)?mysql?服務(wù)
相關(guān)文章
Docker私有倉(cāng)庫(kù)Harbor介紹和部署方法詳解
這篇文章主要介紹了Docker私有倉(cāng)庫(kù)Harbor介紹和部署方法,需要的朋友可以參考下2022-01-01如何在docker中運(yùn)行springboot項(xiàng)目過(guò)程圖解
這篇文章主要介紹了如何在docker中運(yùn)行springboot項(xiàng)目過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06Docker動(dòng)態(tài)給容器Container暴露端口操作
這篇文章主要介紹了Docker動(dòng)態(tài)給容器Container暴露端口操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11Docker attach 命令卡死的問(wèn)題及解決方案
Docker 是一種輕量級(jí)的容器化平臺(tái),可以實(shí)現(xiàn)快速部署、運(yùn)行和管理應(yīng)用程序,這篇文章給大家介紹Docker attach 命令卡死的解決方案,感興趣的朋友一起看看吧2023-12-12centos6使用docker部署kafka項(xiàng)目的方法分析
這篇文章主要介紹了centos6使用docker部署kafka項(xiàng)目的方法,結(jié)合實(shí)例形式分析了centos6環(huán)境下使用docker部署kafka項(xiàng)目的相關(guān)命令與使用技巧,需要的朋友可以參考下2020-02-02docker拷貝文件到主機(jī)及導(dǎo)入導(dǎo)出容器及運(yùn)行導(dǎo)出容器方式
這篇文章主要介紹了docker拷貝文件到主機(jī)及導(dǎo)入導(dǎo)出容器及運(yùn)行導(dǎo)出容器方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05在 docker 之間導(dǎo)出導(dǎo)入鏡像的方法
本篇文章主要介紹了在 docker 之間導(dǎo)出導(dǎo)入鏡像的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07