Docker學習一-MySQL主從熱備

Docker學習二-MySQL雙主互備 https://blog.csdn.net/rajayu/article/details/88840234

主從複製原理

  主從複製原理圖:
在這裏插入圖片描述
執行主從複製三步:

      ①master將改變記錄到二進制日誌(Binary log)

      ②Slave訪問IO Thread將Master的Bibary log 記錄拷貝到Slave的中繼日誌(Relay log)
      
      ③Slave的SQL thread線程執行Relay log的事件,將改變執行一遍,同步到Slave的數據庫中

環境要求

  • win10系統,或者Linux系統做參考
  • docker for windows, win10以上電腦纔可使用
  • mysql5.7,可以只安裝MySQL Server,也不是必需品
  • Navicat

  一直知道docker是個神奇的東西,想要學習下使用,去年的時候,安裝windows版本的docker還是會有一大堆問題,啓動的時候就會出一大堆問題,而現在新版本的docker已經完全沒有問題,可以正常使用,安裝過程我在這裏不做贅述,大家可以度娘。

下載鏡像

  1. 搜索官方鏡像 ,命令:
docker search mysql

在這裏插入圖片描述

  1. 下載鏡像,命令:
docker pull mysql:5.7.21

在這裏插入圖片描述
3. 常用命令:

 - docker images |grep “*”  #本地鏡像列表中查找對應REPOSITORY爲*的鏡像
 - docker run [OPTIONS] IMAGE [COMMAND] [ARG...] #創建一個本地容器,並啓動容器中實例
 - docker start/stop/restart #啓動/停止/重啓實例
 - docker exec [OPTIONS] CONTAINER COMMAND [ARG...] #在運行的容器中執行命令
 - docker exec -i -t  mysql01 /bin/bash #在容器mysql01 中開啓一個交互模式的終端
 - docker ps #查看正在運行的容器
 - docker logs --tail="100" mysql01 #查看mysql01容器中的日誌,倒數100行

啓動mysql容器

  1. 啓動主庫,容器名:mysql01
docker run -p 3308:3306 --name mysql01 -v D:\Docker\mysql\mysql01:/docker 
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

字段解釋:
-p 3308:3306:將容器的 3306 端口映射到主機(本地電腦)的 3308 端口。
–name mysql01:容器名配置爲mysql01
-v D:\Docker\mysql\mysql01:/docker:將主機的D:\Docker\mysql\mysql01目錄掛載到容器的/docker
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用戶的密碼。
-d mysql:5.6:使用的鏡像
注: 如果要目錄掛載,必須在docker中做這樣的配置,用於共享驅動器,我們共享的是D盤的文件夾,這裏共享的驅動器就是D盤。
在這裏插入圖片描述
2. 啓動從庫,容器名:mysql02

docker run -p 3309:3306 --name mysql02 -v D:\Docker\mysql\mysql02:/docker 
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

和主庫一樣。

配置

主庫配置

  1. 修改mysql配置
      mysql鏡像中的默認的配置文件爲/etc/mysql/mysql.conf.d/mysqld.cnf,根據需要配置其參數即可。這裏我們主要配置主從複製相關參數。
    第一步,在容器mysql01中實例啓動的時候操作,先將/etc/mysql/mysql.conf.d/mysqld.cnf複製到掛載的D:\Docker\mysql\mysql02下面;
    第二步,修改配置文件,添加如下內容:
server-id=1 #採用自然數,保持唯一即可
read-only=0 #0代表讀寫均可
binlog-do-db=test-copy #代表需要進行同步的數據庫
binlog-ignore-db=mysql #不同步的數據庫
binlog-ignore-db=sys
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
log-bin=mysql-bin #二進制日誌
##不加binlog-do-db和binlog_ignore_db,那就表示備份全部數據庫。

第三步,將修改好的配置文件,複製到/etc/mysql/mysql.conf.d/mysqld.cnf,覆蓋原有的文件

docker exec -it mysql01 cp /docker/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf

第四步,重啓容器中實例。
在這裏插入圖片描述
2. 配置同步的從庫,在主服務器新建一個用戶賦予“REPLICATION SLAVE”的權限

grant replication slave on *.* to [email protected] identified by '123456';

在這裏插入圖片描述
3. 查看主庫狀態

show master status; 

在這裏插入圖片描述
  需記住File、Position,配置從庫時會用到

從庫配置

  1. 修改mysql配置
      mysql鏡像中的默認的配置文件爲/etc/mysql/mysql.conf.d/mysqld.cnf,根據需要配置其參數即可。這裏我們主要配置主從複製相關參數。
    第一步,在容器mysql01中實例啓動的時候操作,先將/etc/mysql/mysql.conf.d/mysqld.cnf複製到掛載的D:\Docker\mysql\mysql02下面;
    第二步,修改配置文件,添加如下內容:
server-id=2 #從庫,所以不能和主庫一致
read-only=1
replicate-do-db=test-copy
replicate-ignore-db=mysql 
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

第三步,將修改好的配置文件,複製到/etc/mysql/mysql.conf.d/mysqld.cnf,覆蓋原有的文件

docker exec -it mysql01 cp /docker/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf

第四步,重啓容器中實例。
在這裏插入圖片描述
2. 配置主庫信息

change master to master_host='10.238.64.31',master_port=3308,master_user='root',master_password='123456',
master_log_file='mysql-bin.000001',master_log_pos=329;
  1. 啓動並查看從庫狀態
start slave; 
show slave status \G;

在這裏插入圖片描述
其中Slave_IO_Running、Slave_SQL_Running均爲Yes代表配置成功

測試主從複製

主庫新建test-copy(與前面配置文件中要同步的數據庫名一致)數據庫
在這裏插入圖片描述
新建完成後,刷新從庫,從庫也會存在test-copy數據庫,代表主從複製配置成功,之後主庫的讀寫操作均會同步至從庫
在這裏插入圖片描述

注意事項

  1. 如果出現Slave_IO_Running:Yes,Slave_SQL_Running:No的情況,可能是因爲刪了主庫的數據庫,同步到從庫的時候沒有庫導致的,錯誤日誌:
    在這裏插入圖片描述
    這樣修改就可以了:
    在這裏插入圖片描述
  2. 如果Slave_IO_Running: Connecting,一直處於這種狀態,並且看日誌,Error_code是1045。
    錯誤日誌:
    在這裏插入圖片描述
    目前的解決方案:
    修改主庫中這個用戶的權限
    grant replication slave on . to slave@’%’ identified by ‘123456’;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章