docker mysql5.7 主从_docker-compose mysql5.7.30 主从
一、安裝mysql5.7.30主庫
1.準備docker和docker-compose環境
2.創建yml目錄,相關數據掛載
#yml存放的目錄
mkdir -p /root/docker-compse/mysql
#主庫的/var/lib/mysql 數據的掛載目錄
mkdir -p /data/mysql5matser
#不用slave 了,用replication的縮寫replic , slave 是奴隸的意思,在美國有種族歧視的之嫌
#從庫的/var/lib/mysql 數據的掛載目錄
mkdir -p /data/mysql5replic
3.創建網絡空間,配置時區
docker network create mysql-replic
echo 'Asia/Shanghai' > /etc/timezone
4.提前準備好所需鏡像
docker pull mysql:5.7.30
5.主庫/root/docker-compse/mysql/master.yml
version: '3.7'
services:
#主庫服務名稱
mysql-master:
#容器名稱
container_name: mysql-master
#鏡像名稱 提前 docker pull mysql:5.7.30 不然會很慢
image: mysql:5.7.30
#docker 重啟后容器重啟
restart: always
#選擇自建bridge網絡
networks:
- mysql_replic
#mysql 參數配置 my.cnf里面的配置,這里簡單配置下,可以配置volumes /etc/my.cnf:/etc/my.cnf
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --server-id=1 --log-bin=mysql-bin
environment:
- TZ=Asia/Shanghai
#默認密碼配置 123456 修改成您的密碼
- MYSQL_ROOT_PASSWORD=123456
ports:
- 3307:3306
volumes:
- /etc/localtime:/etc/localtime
- /etc/timezone:/etc/timezone
#掛載目錄 /var/lib/mysql 是mysql的數據
- /data/mysql5matser:/var/lib/mysql
#配置網絡
networks:
mysql_replic:
name: mysql_replic
#強制使用已經創建好的網絡,不然報錯
external: true
6.啟動主庫
docker-compose -f master.yml up -d
7.進入容器,登錄主庫
#進入docker
docker exec -it mysql-master bash
#進入docker的mysql
mysql -uroot -p
#輸入密碼
8.創建同步賬號replic,授權同步權限,查看主庫狀態信息
-- 創建同步賬號
CREATE USER 'replic'@'%' IDENTIFIED BY '123456';
-- 授權權限
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replic'@'%';
-- 查看主節點狀態
show master status;
-- 數據的結果
-- +------------------+----------+--------------+------------------+-------------------+
-- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
-- +------------------+----------+--------------+------------------+-------------------+
-- | mysql-bin.000003 | 619 | | | |
-- +------------------+----------+--------------+------------------+-------------------+
二、安裝mysql5.7從庫,同步主庫數據
1.從庫/root/docker-compse/mysqlreplic.yml
version: '3.7'
services:
#從庫服務名稱
mysql-replic:
#容器名稱
container_name: mysql-replic
#鏡像名稱 提前 docker pull mysql:5.7.30 不然會很慢
image: mysql:5.7.30
#docker 重啟后容器重啟
restart: always
#選擇自建bridge網絡
networks:
- mysql_replic
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --server-id=2 --log-bin=mysql-slave-bin --relay_log=ep-mysql-relay-bin? --read_only=1
environment:
#時區
- TZ=Asia/Shanghai
#默認密碼配置
- MYSQL_ROOT_PASSWORD=123456
volumes:
- /etc/localtime:/etc/localtime
- /etc/timezone:/etc/timezone
#掛載目錄 /var/lib/mysql 是數據盤
- /data/mysql5replic:/var/lib/mysql
ports:
- 3308:3306
#配置網絡
networks:
mysql_replic:
name: mysql_replic
#強制使用已經創建好的網絡,不然報錯
external: true
2.啟動從庫
docker-compose -f replic.yml up -d
#不用管 提醒
#WARNING: Found orphan containers (mysql-master) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
3.進入容器,登錄從庫
#進入容器
docker exec -it mysql-replic bash
#登錄mysql
mysql -uroot -p
#輸入密碼
4.同步腳本
-- 查看從庫狀態
show slave status ;
-- 第一次安裝執行會返回
-- Empty set (0.00 sec)
-- 同步設置
change master to master_host='mysql-master', master_user='replic', master_password='123456', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=619;
-- 啟動同步
start slave;
-- 查看同步結果
show slave status \G;
-- *************************** 1. row ***************************
-- Slave_IO_State: Waiting for master to send event
-- Master_Host: mysql-master
-- Master_User: replic
-- Master_Port: 3306
-- Connect_Retry: 60
-- Master_Log_File: mysql-bin.000003
-- Read_Master_Log_Pos: 619
-- Relay_Log_File: ep-mysql-relay-bin?.000002
-- Relay_Log_Pos: 320
-- Relay_Master_Log_File: mysql-bin.000003
-- 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: 619
-- Relay_Log_Space: 532
-- 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: 1
-- Master_UUID: b2353e18-8d00-11ea-9de4-0242ac170002
-- 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:
5.成功標志
-- 表示同步成功
-- Slave_IO_Running: Yes
-- Slave_SQL_Running: Yes
三、檢查主從同步
1.進入主庫創建一個數據庫
create database test;
show databases;
-- 輸出
-- +--------------------+
-- | Database |
-- +--------------------+
-- | information_schema |
-- | mysql |
-- | performance_schema |
-- | sys |
-- | test |
.主庫創建只讀賬號,供從庫只讀使用
grant select on *.* TO 'view'@'%' identified by '123456';
-- 從庫修改數據會
--1290 - The MySQL server is running with the --read-only option so it cannot execute this statement
3.進入從庫查看
show databases;
-- 輸出
-- +--------------------+
-- | Database |
-- +--------------------+
-- | information_schema |
-- | mysql |
-- | performance_schema |
-- | sys |
-- | test |
四、卸載mysql主從
1.刪除容器
#刪除從庫容器
docker-compose -f replic.yml down
#刪除主庫容器
docker-compose -f master.yml down
2.刪除數據(謹慎使用此命令)
rm -rf /data/mysql5matser
rm -rf /data/mysql5replic
PS:如果疑問留言,如果對您有用,請點贊支持
下期預告 springboot mybatis druid 實現讀寫分離
參考文檔
總結
以上是生活随笔為你收集整理的docker mysql5.7 主从_docker-compose mysql5.7.30 主从的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: win32程序启用控制台-- 调试输出
- 下一篇: C语言面向对象编程(一):封装与继承
