使用docker部署mysql主从复制集群
一、環境搭建
虛擬機環境:centos7 IP:192.168.37.134 用戶名:root 密碼:123啟動3個容器,一個是master,端口是3307,另外兩個是slaver,端口是3308和3309
docker pull mysql:5.7docker run -p 3307:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7 docker run -p 3308:3306 --name mysql-slaver1 -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7 docker run -p 3309:3306 --name mysql-slaver2 -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7?
?二、配置mysql-master
進入mysql-master容器,修改/etc/mysql/my.cnf,添加
[mysqld] server-id=3307 ##自定義id號,不要重 log-bin=mysql-bin ##開啟二進制日志?
?注意:在使用vim時,可能會出現not found,需要apt-get install vim
修改好my.cnf后,需要重啟一下mysql,重啟一下mysql-master容器,重新進入容器
service mysql restartdocker start mysql-master
docker exec -it mysql-master /bin/bash
?進入容器后,登錄mysql,為slaver分配一個賬號
CREATE USER 'slave'@'%' IDENTIFIED BY '123abc'; ##用戶名是slave,密碼是123abc GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; ##指定訪問權限查看當前主機狀態,注意:查看完狀態后就不要再進行其他的操作了,slaver會引用mster的Position編碼,每次操作Position都會變。
到這里,master就配置完成了,等待slaver的連接。
?三、配置mysql-slaver
以mysql-slaver1為例
進入容器和配置master一樣
修改/etc/mysql/my.cnf文件,添加
[mysqld] server-id=3308 ##id號,自定義,不要重就行 log-bin=mysql-slave-bin ##開啟二進制日志功能 relay_log=edu-mysql-relay-bin ##配置中繼日志然后是重啟mysql,重啟容器,重新進入容器,登錄mysql進行下一步配置
service mysql restart docker start mysql-slaver1 docker exec -it mysql-slaver2 /bin/bash mysql -u root -p?執行命令進行master的連接,需要配置master的ip,用戶名,密碼,日志文件和當前版本號
change master to master_host='192.168.37.134', master_user='slave', master_password='abc123', master_port=3307, master_log_file='mysql-bin.000001', master_log_pos= 789, master_connect_retry=30;查看連接狀態
show slave status \G;可以看到當前狀態是未開啟主從復制,接下來開啟,再查看狀態
start slave;show slave status \G;
當看到這個的時候,說明我們的配置出現了問題,原因是密碼寫錯了,出現這種情況一般就是在連接配置的時候出現了問題。現在改回來重新執行如下代碼
stop slave; #修改之前需要先stop一下change master to master_host='192.168.37.134', master_user='slave', master_password='123abc', master_port=3307, master_log_file='mysql-bin.000001', master_log_pos= 789, master_connect_retry=30;
start slave;
show dlave status \G;
當看到兩個Yes的時候,說明slave配置成功了,并且已經開啟了主從復制。
mysql-slaver2配置相同。
四、測試
mysql-master上創建一個數據庫,創建表,插入數據
create database test charset utf8; use test; create table user(id int(11),name varchar(255))charset utf8; insert into user(id,name) values(100,'tom'),(101,'jerry');在其中一臺mysql-slaver1上查看數據
五、說明一下
1. mysql是按/etc/my.cnf
-> /etc/mysql/my.cnf
-> /usr/local/mysql/etc/my.cnf
-> ~/.my.cnf的順序讀取配置文件的。
如果幾個配置文件中都有相同的參數,mysql會以讀取的最后一個文件配置參數為準。
2. 集群結構
當前的結構是slaver1和slaver2作為master的從機,需要在slaver1和slaver2上配置master的相關信息。
也可以使用串行結構
只不過是slaver2把slaver1認為是master,配置的是slaver1的相關信息
?
在spring項目中,可以配置兩個數據源,一個讀,一個寫。然后DAO層的類分別注入不同的數據源,產生讀的bean和寫的bean,service調用的時候注入指定的bean就可以啦。
?
轉載于:https://www.cnblogs.com/wwzyy/p/11060400.html
總結
以上是生活随笔為你收集整理的使用docker部署mysql主从复制集群的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何查看或修改FANUC机器人的系统变量
- 下一篇: 白话debounce和throttle