基于Docker的Mysql主備搭建的實現(xiàn)步驟
Docker mysql主從配置。我們會在一臺centos的虛擬機上,配置mysql主備
前期規(guī)劃:
- docker mysql版本 mysql:5.7
- docker網(wǎng)絡(luò)配置,我們會創(chuàng)建名稱為mysql的網(wǎng)絡(luò),子網(wǎng)掩碼為 172.88.0.0/16
- docker mysql主對應(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從對應(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
配置過程:
網(wǎng)絡(luò)創(chuàng)建(兩個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
啟動兩個mysql容器,mysql-master,mysql-slave
# 記得修改下conf的配置文件 # chmod -R 777 /usr/local/docker/mysql/master/conf # chmod -R 777 /usr/local/docker/mysql/slave/conf # 啟動容器,一個對應(yīng)主,一個對應(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兩個容器是否正確啟動 [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配置文件修改,因為我們做了docker文件卷處理,所以我們直接在宿主機/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 ## 開啟二進制日志功能,可以隨便?。P(guān)鍵) log-bin=mysql-bin # 進入mysql-master容器里面重啟mysql服務(wù) # docker exec -it mysql-master /bin/bash 進入mysql-master容器 # service mysql restart重啟mysql服務(wù)器 # 這里有一點要注意,重啟mysql服務(wù)之后,mysql-master容器被關(guān)掉了,所以我們需要docker start mysql-master在啟動下容器 [root@localhost /]# docker exec -it mysql-master /bin/bash root@cdcc14b2b2a2:/# service mysql restart [root@localhost /]# docker start mysql-master # 再次進入mysql-master容器授予slave用戶 REPLICATION SLAVE權(quán)限和REPLICATION CLIENT權(quán)限,用于在主從庫之間同步數(shù)據(jù)[slave用戶是用來做數(shù)據(jù)同步的] # 1. CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; # 2. GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; # 3. show master status; ?查看主庫狀態(tài),請記住File和Position對應(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配置文件修改,因為我們做了docker文件卷處理,所以我們直接在宿主機/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 ## 開啟二進制日志功能,以備Slave作為其它Slave的Master時使用 log-bin=mysql-slave-bin ## relay_log配置中繼日志 relay_log=edu-mysql-relay-bin # 進入mysql-slave容器里面重啟mysql服務(wù) # docker exec -it mysql-slave /bin/bash 進入mysql-master容器 # service mysql restart重啟mysql服務(wù)器 # 這里又一點要注意,重啟mysql服務(wù)之后,mysql-slave容器被關(guān)掉了,所以我們需要docker start mysql-slave在啟動下容器 [root@localhost /]# docker exec -it mysql-slave /bin/bash root@205cd234c29b:/# service mysql restart [root@localhost /]# docker start mysql-slave # 再次進入mysql-slave容器,連上mysql-slave數(shù)據(jù)庫 [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主備搭建的實現(xiàn)步驟的文章就介紹到這了,更多相關(guān)Docker Mysql主備搭建內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker動態(tài)給容器Container暴露端口操作
這篇文章主要介紹了Docker動態(tài)給容器Container暴露端口操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11docker拷貝文件到主機及導(dǎo)入導(dǎo)出容器及運行導(dǎo)出容器方式
這篇文章主要介紹了docker拷貝文件到主機及導(dǎo)入導(dǎo)出容器及運行導(dǎo)出容器方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05在 docker 之間導(dǎo)出導(dǎo)入鏡像的方法
本篇文章主要介紹了在 docker 之間導(dǎo)出導(dǎo)入鏡像的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07