国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

基于Docker如何實(shí)現MySQL主從復制詳解

發(fā)布時(shí)間:2023-05-25 09:15 來(lái)源:西部 閱讀:81 作者:西部數碼 欄目: 虛擬主機 歡迎投稿:712375056

服務(wù)器

前言

mysql的主從復制是實(shí)現應用的高性能,高可用的基礎。對于數據庫讀操作較密集的應用,通過(guò)使數據庫請求負載均衡分配到不同Mysql服務(wù)器,可有效減輕數據庫壓力。當遇到MYSQL單點(diǎn)故障中,也能在短時(shí)間內實(shí)現故障切換。本文就MySQL的內建的復制功能進(jìn)行闡述。

版本

MySQl: 5.7.17
CentOS: 7.4.1708
docker: 1.13.1

概述

MySQL復制數據流程:

主庫在數據更新提交事務(wù)之前,將事件異步記錄到binlog二進(jìn)制日志文件中,日志記錄完成后存儲引擎提交本次事務(wù)
從庫啟動(dòng)一個(gè)I/O線(xiàn)程與主庫建立連接,用來(lái)請求主庫中要更新的binlog。這時(shí)主庫創(chuàng )建的binlog dump線(xiàn)程,這是二進(jìn)制轉儲線(xiàn)程,如果有新更新的事件,就通知I/O線(xiàn)程;當該線(xiàn)程轉儲二進(jìn)制日志完成,沒(méi)有新的日志時(shí),該線(xiàn)程進(jìn)入sleep狀態(tài)。
從庫的I/O線(xiàn)程接收到新的事件日志后,保存到自己的relay log(中繼日志)中
從庫的SQL線(xiàn)程讀取中繼日志中的事件,并執行更新保存。

配置主從庫

主庫my.cnf配置

在主庫的my.cnf中打開(kāi)二進(jìn)制日志,并設置服務(wù)Id。

log-bin = mysql-bin
server-id = 1

注意server-id必須是一個(gè)唯一的數字,必須主從不一致, 且主從庫必須設置項。

從庫my.cnf配置

log-bin = mysql-bin
server-id = 2
log-slave-updates = 1
read-only = 1

從庫也開(kāi)啟log-bin,log-slave-updates設置為從庫重放中繼日志時(shí),記錄到自己的二進(jìn)制日志中,可以讓從庫作為其他服務(wù)器的主庫,將二進(jìn)制日志轉發(fā)給其他從庫,在做一主多從方案時(shí)可考慮該種方案。

Dockerfile構建MySQL鏡像

構建所需文件

這里master和slave文件各自保存不共用,先創(chuàng )建文件夾 /usr/local/mysql 然后在目錄創(chuàng )建master和slave兩個(gè)目錄,再各自創(chuàng )建data文件夾

data 目錄用來(lái)保存數據文件的目錄
Dockerfile 保存Dockerfile內容
init.sql 初始化數據庫的SQL
my.cnf 數據庫配置文件,配置方式上面已提到
start.sh Dockerfile構建MySQL時(shí)的腳本

Dockerfile 內容

# 利用 mysql 鏡像創(chuàng  )建新的鏡像
FROM mysql:5.7.17

ENV MYSQL_ROOT_PASSWORD ytao

COPY start.sh /mysql/start.sh
COPY my.cnf /etc/mysql/my.cnf 
COPY init.sql /mysql/init.sql

EXPOSE 3306
CMD [sh, /mysql/start.sh]

這里的master和slave都是基于同一個(gè)鏡像構建,使用的存儲引擎和其他的組件最好是同一中,不然在復制過(guò)程中可能會(huì )出現異常。

init.sql 初始化數據

-- 創(chuàng  )建 data_copy 數據庫
DROP DATABASE IF EXISTS `data_copy`;
CREATE DATABASE `data_copy` /*!40100 DEFAULT CHARACTER SET utf8mb4 collate utf8mb4_general_ci */;

-- 創(chuàng  )建 person 表
USE `data_copy`;
DROP TABLE IF EXISTS `person`;
CREATE TABLE `person` (
 `id` int(32) NOT NULL,
 `name` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

創(chuàng )建data_copy數據庫和person表。

start.sh 腳本

#!/bin/sh
echo \'啟動(dòng)mysql\'
service mysql start
sleep 5

echo \'初始化數據庫\'
mysql -uroot -pytao < /mysql/init.sql
echo \'初始化完成!\'
tail -f /dev/null

構建master和slave鏡像并運行容器

構建master鏡像

docker build -t master/mysql .

構建slave鏡像

docker build -t slave/mysql .

構建成功會(huì )返回 Successfuly,或通過(guò)docker images命令查看鏡像

使用剛構建的鏡像來(lái)運行容器

# master 容器
docker run --name master -p 3306:3306 -v /usr/local/mysql/master/data/:/var/lib/mysql -d master/mysql

# slave 容器
docker run --name slave -p 3307:3306 -v /usr/local/mysql/slave/data/:/var/lib/mysql -d slave/mysql

指定master端口為3306,slave端口為3307,掛載data目錄為保存數據的目錄。

連接到數據庫后驗證數據庫是否初始化成功

查看 log-bin 是否開(kāi)啟

創(chuàng )建復制賬號

前面有提到從庫I/O線(xiàn)程要與主庫建立連接,所以需要用到賬號進(jìn)行驗證。賬號除了要有連接權限(REPLICATION CLIENT),同時(shí)還要有復制權限(REPLICATION SLAVE)。

GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO muser@\'%\' IDENTIFIED BY \'ytao\'; 

這里設置的訪(fǎng)問(wèn)地址是開(kāi)放的,實(shí)際使用過(guò)程中安全起見(jiàn)一定要指定訪(fǎng)問(wèn)地址。

從庫啟動(dòng)復制

從庫連接到主庫,獲取到二進(jìn)制日志后重放。這里首先要配置上面創(chuàng )建的賬號進(jìn)行連接,使用命令進(jìn)行相應的設置。

CHANGE MASTER TO 
MASTER_HOST = \'47.107.xx.xxx\',
MASTER_PORT = 3306,
MASTER_USER = \'muser\',
MASTER_PASSWORD = \'ytao\',
MASTER_LOG_FILE = \'mysql-bin.000006\';

到這里復制還沒(méi)有啟動(dòng),需要再從庫中啟動(dòng)

START SLAVE;

使用SHOW SLAVE STATUS\\G;命令查看啟動(dòng)后的情況

上面標記的輸出信息Slave_IO_Running: Yes和Slave_SQL_Running: Yes可以看到I/O線(xiàn)程和SQL線(xiàn)程已啟動(dòng)運行中。

測試同步數據

如果在主庫中添加,更新或刪除一個(gè)數據,那么從庫中應該也有與主庫對應的數據變化。

向主庫添加一條數據

INSERT INTO `data_copy`.`person` (`id`, `name`) VALUES (\'1\', \'ytao\');

查詢(xún)從庫數據,數據已被同步過(guò)來(lái)。

總結

上述是最簡(jiǎn)單最基本的配置,但是理解上面的配置過(guò)程,就可以根據自身情況定制不同方案,實(shí)現一主多從,主主復制(主動(dòng)-主動(dòng)或主動(dòng)-被動(dòng)模式)等等來(lái)滿(mǎn)足自身需求。

MySQL的復制雖然使用簡(jiǎn)單方便,但也伴隨著(zhù)一些問(wèn)題需要我們在使用中進(jìn)行解決,比如:不能從服務(wù)器異常停止中恢復,數據同步的延遲等等,還好現在遇到的大部分問(wèn)題在行業(yè)中已得到相應的解決。對這方面感興趣的可以去了解下現在解決這些問(wèn)題的中間件實(shí)現方案。

好了,以上就是這篇文章的全部?jì)热萘?,希望本文的內容對大家的學(xué)習或者工作具有一定的參考學(xué)習價(jià)值,謝謝大家對特網(wǎng)科技的支持。

更多關(guān)于云服務(wù)器,域名注冊,虛擬主機的問(wèn)題,請訪(fǎng)問(wèn)特網(wǎng)科技官網(wǎng):wap.friendlycc.com.cn

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

国产人妇三级视频在线观看| 天堂8中文资源库在线官网| 久久精品国产亚洲七七| 久久99国产综合精品| 精品国产乱码久久久久久软件大全| 风流少妇BBWBBW69视频|