欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Docker實現(xiàn)MySQL主從復(fù)制的詳細教程

 更新時間:2024年10月30日 10:04:53   作者:徒步僧  
這篇博客整理了如何在Docker環(huán)境下配置MySQL主從復(fù)制,通過創(chuàng)建和命名兩個MySQL容器,設(shè)置獨立IP,并詳細說明了在宿主機上持久化數(shù)據(jù)、開啟root遠程訪問及添加復(fù)制用戶的過程,需要的朋友可以參考下

一、通過docker鏡像搭建MySQL主從

主服務(wù)器:容器名zi-mysql-master,端口3306

從服務(wù)器:容器名zi-mysql-slave1,端口3307

從服務(wù)器:容器名zi-mysql-slave2,端口3308

二、關(guān)閉防火墻,啟動docker

#關(guān)閉docker

systemctl stop docker

#關(guān)閉防火墻

systemctl stop firewalld

#啟動docker

systemctl start docker

三、搭建主服務(wù)器master(主機中創(chuàng)建slave用戶)

3.1:在docker中創(chuàng)建并啟動MySQL主服務(wù)器:端口3306 

sudo docker run -d \
    --privileged --restart always \
    --name zi-mysql-master \
    -e MYSQL_ROOT_PASSWORD=root \
    -e MYSQL_DEFAULT_USERNAME=root \
    -e MYSQL_DEFAULT_PASSWORD=123456 \
    -v /xixi/mysql/master/conf:/etc/mysql/conf.d  \
    -v /xixi/mysql/master/data:/var/lib/mysql   \
    -p 3309:3306  \  
mysql:8.0.23

如果docker本地鏡像中沒有MySQL,會默認去下載鏡像

3.2:創(chuàng)建MySQL主服務(wù)器配置文件:

默認情況下MySQL的binlog日志是自動開啟的,可以通過如下配置定義一些可選配置

vi /xixi/mysql/master/conf/my.cnf

配置文件內(nèi)容:

通過vim命令寫入到my.cnf即可

[mysqld]
# 服務(wù)器唯一id,默認值1
server-id=1
# 設(shè)置日志格式,默認值ROW
binlog_format=STATEMENT
# 二進制日志名,默認binlog
# log-bin=binlog
# 設(shè)置需要復(fù)制的數(shù)據(jù)庫,默認復(fù)制全部數(shù)據(jù)庫
#binlog-do-db=mytestdb
# 設(shè)置不需要復(fù)制的數(shù)據(jù)庫
#binlog-ignore-db=mysql
#binlog-ignore-db=infomation_schema

重啟MySQL容器

docker restart zi-mysql-master

注意:binlog日志binlog格式說明:

binlog_format=STATEMENT:日志記錄的是主機數(shù)據(jù)庫的寫指令,性能高,但是now()之類的函數(shù)以及獲取系統(tǒng)參數(shù)的操作會出現(xiàn)主從數(shù)據(jù)不同步的問題。

binlog_format=ROW(默認):日志記錄的是主機數(shù)據(jù)庫的寫后的數(shù)據(jù),批量操作時性能較差,解決now()或者 user()或者 @@hostname 等操作在主從機器上不一致的問題。

binlog_format=MIXED:是以上兩種level的混合使用,有函數(shù)用ROW,沒函數(shù)用STATEMENT,但是無法識別系統(tǒng)變量

我們此處采用STATEMENT模式

(一般采用默認的ROW格式)

3.3:使用命令行登錄MySQL主服務(wù)器:

#進入容器:env LANG=C.UTF-8 避免容器中顯示中文亂碼

docker exec -it zi-mysql-master env LANG=C.UTF-8 /bin/bash

#進入容器內(nèi)的mysql命令行

mysql -uroot -p

# 如果SQLyog或Navicat測試連接報錯,修改默認加密方式

#修改默認密碼校驗方式

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

 3.4:主機中創(chuàng)建slave用戶:

-- 創(chuàng)建slave用戶

CREATE USER 'zi_slave'@'%';

-- 設(shè)置密碼

ALTER USER 'zi_slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

-- 授予復(fù)制權(quán)限

GRANT REPLICATION SLAVE ON *.* TO 'zi_slave'@'%';

-- 刷新權(quán)限

FLUSH PRIVILEGES;

 3.5:主機中查詢master狀態(tài):

執(zhí)行完此步驟后不要再操作主服務(wù)器MYSQL,防止主服務(wù)器狀態(tài)值變化

SHOW MASTER STATUS;

記下File和Position的值。執(zhí)行完此步驟后不要再操作主服務(wù)器MYSQL,防止主服務(wù)器狀態(tài)值變化?!緁ile和position后續(xù)配置從服務(wù)器會使用】

四、搭建從服務(wù)器slave1、slave2

4.1、在docker中創(chuàng)建并啟動MySQL從服務(wù)器

復(fù)制shell會話或者新建兩個終端,分別創(chuàng)建slave服務(wù)器

在docker中創(chuàng)建并啟動MySQL從服務(wù)器slave1:端口3307

sudo docker run -d \
    --privileged --restart always \
    --name zi-mysql-slaver1 \
    -e MYSQL_ROOT_PASSWORD=root \
    -e MYSQL_DEFAULT_USERNAME=root \
    -e MYSQL_DEFAULT_PASSWORD=123456 \
    -v /xixi/mysql/slaver1/conf:/etc/mysql/conf.d  \
    -v /xixi/mysql/slaver1/data:/var/lib/mysql   \
-p 3307:3306  mysql:8.0.23

在docker中創(chuàng)建并啟動MySQL從服務(wù)器slave2:端口3308

sudo docker run -d \
    --privileged --restart always \
    --name zi-mysql-slaver2 \
    -e MYSQL_ROOT_PASSWORD=root \
    -e MYSQL_DEFAULT_USERNAME=root \
    -e MYSQL_DEFAULT_PASSWORD=123456 \
    -v /xixi/mysql/slaver2/conf:/etc/mysql/conf.d  \
    -v /xixi/mysql/slaver2/data:/var/lib/mysql   \
    -p3308:3306  mysql:8.0.23

4.2:創(chuàng)建MySQL從服務(wù)器配置文件:

slave1:

vi/xixi/mysql/slave1/conf/my.cnf

配置如下內(nèi)容:

[mysqld]
# 服務(wù)器唯一id,每臺服務(wù)器的id必須不同,如果配置其他從機,注意修改id
server-id=2
# 中繼日志名,默認xxxxxxxxxxxx-relay-bin
#relay-log=relay-bin

slave2

vim /zi/mysql/slave2/conf/my.cnf
[mysqld]
 
# 服務(wù)器唯一id,每臺服務(wù)器的id必須不同,如果配置其他從機,注意修改id
 
server-id=3
 
# 中繼日志名,默認xxxxxxxxxxxx-relay-bin
 
#relay-log=relay-bin

重啟MySQL容器(slave1、slave2)

docker restart zi-mysql-slave1
 
docker restart zi-mysql-slave2

4.3:使用命令行登錄MySQL從服務(wù)器:

slave1:

進入容器:

Docker exec -it zi-mysql-slave1 env LANG=C.UTF-8 /bin/bash

進入容器內(nèi)的mysql命令行

mysql -uroot -p

修改默認密碼校驗方式

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

slave2:

docker exec -it zi-mysql-slave2 env LANG=C.UTF-8 /bin/bash

進入容器內(nèi)的mysql命令行

mysql -uroot -p

修改默認密碼校驗方式

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

4.4:在從機上配置主從關(guān)系:

slave1、slave2:

在從機上執(zhí)行以下SQL操作[兩臺從機操作都一樣]

此處就需要用到我們之前記錄好的主庫的file和position:

通過在主庫執(zhí)行SHOW MASTER STATUS;可以查看主庫這兩項配置,但是執(zhí)行命令后不要再操作主庫,以免發(fā)生改變 

CHANGE MASTER TO MASTER_HOST='192.168.145.48', 
MASTER_USER='zi_slave',MASTER_PASSWORD='123456', MASTER_PORT=3306,
MASTER_LOG_FILE='binlog.000003',MASTER_LOG_POS=1357; 

4.5 啟動主從同步

在從服務(wù)器上啟動從機的復(fù)制功能,執(zhí)行SQL:

START SLAVE;

-- 查看狀態(tài)(不需要分號) \G表示縱向顯示, G需要大寫

SHOW SLAVE STATUS\G

兩個關(guān)鍵進程: 下面兩個參數(shù)都是Yes,則說明主從配置成功!

六、測試實現(xiàn)主從同步

在主機中執(zhí)行以下SQL,在從機中查看數(shù)據(jù)庫、表和數(shù)據(jù)是否已經(jīng)被同步

CREATE DATABASE db_user;
 
USE db_user;
 
CREATE TABLE t_user (
 
 id BIGINT AUTO_INCREMENT,
 
 uname VARCHAR(30),
 
 PRIMARY KEY (id)
 
);
 
INSERT INTO t_user(uname) VALUES('zhang3');
 
INSERT INTO t_user(uname) VALUES(@@hostname);

查看結(jié)果

主從都使用db_user數(shù)據(jù)庫:

use db_user;

master

slave1

七、常見問題:

問題一

ERROR 3021 (HY000): This operation cannot be performed with a running slave io thread; run STOP SLAVE IO_THREAD FOR CHANNEL '' first.

原因:

因為之前已經(jīng)創(chuàng)建過主節(jié)點,需停掉之前的配置 再重新配置

執(zhí)行如下命令(在從節(jié)點上重新配置主節(jié)點)

stop slave;
 
reset master;

問題二

①啟動主從同步后,常見錯誤是Slave_IO_Running: No 或者 Connecting 的情況,此時查看下方的 Last_IO_ERROR錯誤日志,根據(jù)日志中顯示的錯誤信息在網(wǎng)上搜索解決方案即可

典型的錯誤例如: Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: ‘Client requested master to start replication from position > file size’

-- 在從機停止slave

STOP SLAVE;

-- 在主機查看mater狀態(tài)

SHOW MASTER STATUS;

-- 在主機刷新日志

FLUSH LOGS;

-- 再次在主機查看mater狀態(tài)(會發(fā)現(xiàn)File和Position發(fā)生了變化)

SHOW MASTER STATUS;

-- 修改從機連接主機的SQL,并重新連接即可

②啟動docker容器后提示 WARNING: IPv4 forwarding is disabled. Networking will not work.

此錯誤,雖然不影響主從同步的搭建,但是如果想從遠程客戶端通過以下方式連接docker中的MySQL則沒法連接

解決方案:

修改配置文件:

vim /usr/lib/sysctl.d/00-system.conf

追加

net.ipv4.ip_forward=1

接著重啟網(wǎng)絡(luò)

systemctl restart network

解決方案:

CREATE USER 'zi_slave'@'%' IDENTIFIED BY '123456';
 
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'zi_slave'@'%';

-- 發(fā)現(xiàn)master端和此處密碼不一樣

2.7 停止和重置主從

需要的時候,可以使用如下SQL語句

-- 在從機上執(zhí)行。功能說明:停止I/O 線程和SQL線程的操作。

stop slave;

-- 在從機上執(zhí)行。功能說明:用于刪除SLAVE數(shù)據(jù)庫的relaylog日志文件,并重新啟用新的relaylog文件。

reset slave;

-- 在主機上執(zhí)行。功能說明:刪除所有的binglog日志文件,并將日志索引文件清空,重新開始所有新的日志文件。

-- 用于第一次進行搭建主從庫時,進行主庫binlog初始化工作;

reset master;

以上就是基于Docker實現(xiàn)MySQL主從復(fù)制的詳細教程的詳細內(nèi)容,更多關(guān)于Docker MySQL主從復(fù)制的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用Docker搭建ELK日志系統(tǒng)的方法示例

    使用Docker搭建ELK日志系統(tǒng)的方法示例

    這篇文章主要介紹了使用Docker搭建ELK日志系統(tǒng)的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • Docker容器Consul部署概述

    Docker容器Consul部署概述

    這篇文章主要介紹了Docker容器Consul部署概述,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • 3分鐘帶你學(xué)會docker搭建帕魯服務(wù)器

    3分鐘帶你學(xué)會docker搭建帕魯服務(wù)器

    幻獸帕魯已經(jīng)正式開服,目前在線人數(shù)已經(jīng)超過7W+,很多玩家想自己創(chuàng)建服務(wù)器和朋友一起聯(lián)機游玩,本文主要介紹了3分鐘帶你學(xué)會docker搭建帕魯服務(wù)器,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Docker搭建Redis主從復(fù)制的實現(xiàn)步驟

    Docker搭建Redis主從復(fù)制的實現(xiàn)步驟

    本文主要介紹了Docker搭建Redis主從復(fù)制的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • Idea通過docker compose?發(fā)布項目的過程

    Idea通過docker compose?發(fā)布項目的過程

    這篇文章主要介紹了Idea結(jié)合docker-compose發(fā)布項目,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • docker如何創(chuàng)建nginx圖片服務(wù)器

    docker如何創(chuàng)建nginx圖片服務(wù)器

    這篇文章主要介紹了docker如何創(chuàng)建nginx圖片服務(wù)器問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Docker images導(dǎo)出和導(dǎo)入操作

    Docker images導(dǎo)出和導(dǎo)入操作

    這篇文章主要介紹了Docker images導(dǎo)出和導(dǎo)入操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • ubuntu系統(tǒng)使用docker gitlab 磁盤空間滿的問題及解決

    ubuntu系統(tǒng)使用docker gitlab 磁盤空間滿的問題及解決

    這篇文章主要介紹了ubuntu系統(tǒng)使用docker gitlab 磁盤空間滿的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Docker鏡像的commit操作示例及作用

    Docker鏡像的commit操作示例及作用

    這篇文章主要為大家介紹了Docker鏡像的commit操作示例及作用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • docker部署蝸牛影院系統(tǒng)詳細流程分析

    docker部署蝸牛影院系統(tǒng)詳細流程分析

    這篇文章給大家介紹docker部署蝸牛影院系統(tǒng),在部署項目時系統(tǒng)硬件配置是CPU2核以上,內(nèi)存8G,詳細給大家介紹了安裝流程,對docker部署蝸牛電影院系統(tǒng)感興趣的朋友跟隨小編一起看看吧
    2021-05-05

最新評論