docker 下的 mysql主從

本篇打算創(chuàng)建一個 1主2從的 mysql主從,3個docker容器

  • 首先創(chuàng)建文件夾
    master, slave1, slave2

  • 然后在各個文件夾里創(chuàng)建mysql 的配置文件
    mysql 的配置文件在 /etc/mysql/my.conf
    所以我們在 各個文件夾內(nèi)創(chuàng)建配置文件

D:.                
├─master           
│  └─conf          
│          my.cnf  
├─slave1           
│  └─conf          
│          my.cnf  
└─slave2           
    └─conf         
            my.cnf 
  • 由于我們使用docker默認的mysql鏡像,是最新版的9.0,密碼插件使用的是caching_sha2_password,這個可能會給我我們帶來困擾,所以我們在配置文件里面加入
    default_authentication_plugin=mysql_native_password

  • 相對應(yīng)我們的docker 語句就變成了
    docker run --name some-mysql -v D:\my-project\docker-mysql\master\conf\my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql

  • 連接完配置文件后,就要掛載對應(yīng)的datadir, 相對應(yīng) 我們的docker語句就變成了
    docker run --name master-mysql -v D:\my-project\docker-mysql\master\datadir:/var/lib/mysql -v D:\my-project\docker-mysql\master\conf\my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql

進入 master-mysql 實例
docker exec -it master-mysql bash
進入后 連接進入mysql 創(chuàng)建庫先放入一些數(shù)據(jù),

 ~:mysql -uroto -proot
 mysql> create database newplan DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
    -> ;
Query OK, 1 row affected, 2 warnings (0.03 sec)utf8_general_ci;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| newplan            |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

  • 假設(shè)我們現(xiàn)在已經(jīng)有了數(shù)據(jù),開始配置主從
  • 首先我們是在一個docker 宿主的情況下配置主從,所以我們要先設(shè)置一個網(wǎng)絡(luò)環(huán)境
    docker network create mysql_net 讓我們的mysql 實例都在這一個網(wǎng)絡(luò)環(huán)境下運行
    所以我們的 docker 命令就要進行適當(dāng)修改
    docker run --name master-mysql -v D:\my-project\docker-mysql\master\datadir:/var/lib/mysql -v D:\my-project\docker-mysql\master\conf\my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 --network mysql_net --network-alias network_master_mysql -d mysql

  • 網(wǎng)絡(luò)設(shè)置完畢后 開始著手配置主從首先修改我們主機的my.cnf 加入幾條配置
log-bin=mysql-bin
server-id=1
binlog-do-db=newplan
  • 重啟主機容器
    docker restart master-mysql
  • 進入主機mysql
    docker exec -it master-mysql bahs
    mysql -uroot -proot
  • 設(shè)置一個用戶便于從庫登錄
CREATE USER 'leven'@'localhost' IDENTIFIED BY 'Leven';#創(chuàng)建用戶
GRANT REPLICATION SLAVE ON *.* TO 'leven'@'localhost';#授權(quán)
flush privileges; 
  • 查看當(dāng)前主機master狀態(tài)(記住 File 和 Position)
show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |    10622 | newplan      |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)                                                              

到此主庫的配置基本完畢


  • 修改從庫my.cnf 加入server-id=2
  • 創(chuàng)建從機容器
    docker run --name slave1-mysql -v D:\my-project\docker-mysql\slave1\datadir:/var/lib/mysql -v D:\my-project\docker-mysql\slave1\conf\my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=root -p 3307:3306 --network mysql_net --network-alias network_slave1_mysql -d mysql 注意修改對應(yīng)別名以及端口
  • 登錄從機mysql
docker exec -it slave1-mysql bash
mysql -uroot -proot
  • 執(zhí)行同步SQL設(shè)置語句
    CHANGE MASTER TO MASTER_HOST='network_master_mysql',MASTER_USER='slave',MASTER_PASSWORD='slave',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=10622; master_host 是我們network 的別名,master_log和master_log_pos是我們主機狀態(tài)里面的
  • 啟動同步進程
    start slave;
  • 查看同步狀態(tài)
    show slave status \G
  • 如果碰到錯誤需要跳過
stop slave;
set global sql_slave_skip_counter=1;
start slave;

參考資料:
https://blog.csdn.net/m0_37890289/article/details/80087003
https://store.docker.com/images/mysql
https://dev.mysql.com/doc/relnotes/mysql/8.0/en/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容