docker搭建mysql讀寫分離


 

寫在前面

當mysql數據量不大且達到讀寫瓶頸的時候,讀的性能消耗遠大於寫,我們可以將讀和寫分離開。本實例采用docker容器搭建,通過mycat中間件做分發

准備mysql主從服務

1.准備mysql容器

docker pull mysql:5.7

創建容器網絡,用於固定mysql容器ip

docker network create --subnet=172.18.0.0/24 docker-network

2.創建主從數據映射目錄

// 創建目錄,數據和配置不至於丟失
mkdir -p /usr/local/docker_app/mysql/master/conf.d/
mkdir -p /usr/local/docker_app/mysql/slave/conf.d/

3.創建master配置文件/usr/local/docker_app/mysql/master/conf.d/my.cnf

vi /usr/local/docker_app/mysql/master/conf.d/my.cnf

修改文件配置

[mysqld]
log-bin=master-bin
server-id=1

4.創建slave配置文件/usr/local/docker_app/mysql/slave/conf.d/my.cnf

vi /usr/local/docker_app/mysql/slave/conf.d/my.cnf

修改文件配置

[mysqld]
log-bin=slave-bin
server-id=2

5.啟動master服務

docker run -d --name mysql-master \
-p 3308:3306 \
--net docker-network --ip 172.18.0.10 \
-v /usr/local/docker_app/mysql/master/conf.d/data:/var/lib/mysql \
-v /usr/local/docker_app/mysql/master/conf.d:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

6.啟動slave服務

docker run -d --name mysql-slave \
-p 3307:3306 \
--net docker-network --ip 172.18.0.11 \
-v /usr/local/docker_app/mysql/slave/conf.d/data:/var/lib/mysql \
-v /usr/local/docker_app/mysql/slave/conf.d:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

7.進入容器修改master 的讀寫權限

# 進入容器shell
$ docker exec -it mysql-master /bin/sh
mysql -uroot -p

// mysql shell
// 用戶名:root
// 密碼:root
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

   進入容器修改slave的讀寫權限

# 進入容器shell
$ docker exec -it mysql-slave /bin/sh
//進入mysql
mysql -uroot -p

// mysql shell
// 用戶名:root
// 密碼:root
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
 
8.進入mysql-master查看master狀態
// mysql shell
show master status;

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| master-bin.000003 |     154  |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

9.進入mysql-slave關聯主從模式(自行更改那些參數對應的值)(如果不小心配置錯,輸入mysql> stop slave;然后重新錄入一遍)

// mysql shell
change master to master_host='172.18.0.10', master_user='root',master_password='root', master_log_file='master-bin.000003',master_log_pos=154;
// mysql shell
// 啟用slave
start slave;

10.mysql-slave查看是否成功

show slave status \G;

以下兩個都為yes就代表成功了(不是yes的話自行百度解決)(參考鏈接:https://blog.csdn.net/u013829518/article/details/91869547

Slave_IO_Running: Yes 
Slave_SQL_Running: Yes 
//說明主從成功

11.測試主從
在master創建test數據庫,再到slave中查看是否存在test庫,若存在則基本完成,若未成功檢查binlog、master host、position是否正確;目前已經可以給前台使用,只不過要區分讀寫數據源,挺麻煩!

show databases;   --查看表

create database test;   --創建表

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM