使用docker部署mysql主从复制集群
一、環(huán)境搭建
虛擬機(jī)環(huán)境:centos7 IP:192.168.37.134 用戶名:root 密碼:123啟動(dòng)3個(gè)容器,一個(gè)是master,端口是3307,另外兩個(gè)是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
進(jìn)入mysql-master容器,修改/etc/mysql/my.cnf,添加
[mysqld] server-id=3307 ##自定義id號(hào),不要重 log-bin=mysql-bin ##開(kāi)啟二進(jìn)制日志?
?注意:在使用vim時(shí),可能會(huì)出現(xiàn)not found,需要apt-get install vim
修改好my.cnf后,需要重啟一下mysql,重啟一下mysql-master容器,重新進(jìn)入容器
service mysql restartdocker start mysql-master
docker exec -it mysql-master /bin/bash
?進(jìn)入容器后,登錄mysql,為slaver分配一個(gè)賬號(hào)
CREATE USER 'slave'@'%' IDENTIFIED BY '123abc'; ##用戶名是slave,密碼是123abc GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; ##指定訪問(wèn)權(quán)限查看當(dāng)前主機(jī)狀態(tài),注意:查看完?duì)顟B(tài)后就不要再進(jìn)行其他的操作了,slaver會(huì)引用mster的Position編碼,每次操作Position都會(huì)變。
到這里,master就配置完成了,等待slaver的連接。
?三、配置mysql-slaver
以mysql-slaver1為例
進(jìn)入容器和配置master一樣
修改/etc/mysql/my.cnf文件,添加
[mysqld] server-id=3308 ##id號(hào),自定義,不要重就行 log-bin=mysql-slave-bin ##開(kāi)啟二進(jìn)制日志功能 relay_log=edu-mysql-relay-bin ##配置中繼日志然后是重啟mysql,重啟容器,重新進(jìn)入容器,登錄mysql進(jìn)行下一步配置
service mysql restart docker start mysql-slaver1 docker exec -it mysql-slaver2 /bin/bash mysql -u root -p?執(zhí)行命令進(jìn)行master的連接,需要配置master的ip,用戶名,密碼,日志文件和當(dāng)前版本號(hào)
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;查看連接狀態(tài)
show slave status \G;可以看到當(dāng)前狀態(tài)是未開(kāi)啟主從復(fù)制,接下來(lái)開(kāi)啟,再查看狀態(tài)
start slave;show slave status \G;
當(dāng)看到這個(gè)的時(shí)候,說(shuō)明我們的配置出現(xiàn)了問(wèn)題,原因是密碼寫錯(cuò)了,出現(xiàn)這種情況一般就是在連接配置的時(shí)候出現(xiàn)了問(wèn)題。現(xiàn)在改回來(lái)重新執(zhí)行如下代碼
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;
當(dāng)看到兩個(gè)Yes的時(shí)候,說(shuō)明slave配置成功了,并且已經(jīng)開(kāi)啟了主從復(fù)制。
mysql-slaver2配置相同。
四、測(cè)試
mysql-master上創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),創(chuàng)建表,插入數(shù)據(jù)
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');在其中一臺(tái)mysql-slaver1上查看數(shù)據(jù)
五、說(shuō)明一下
1. mysql是按/etc/my.cnf
-> /etc/mysql/my.cnf
-> /usr/local/mysql/etc/my.cnf
-> ~/.my.cnf的順序讀取配置文件的。
如果幾個(gè)配置文件中都有相同的參數(shù),mysql會(huì)以讀取的最后一個(gè)文件配置參數(shù)為準(zhǔn)。
2. 集群結(jié)構(gòu)
當(dāng)前的結(jié)構(gòu)是slaver1和slaver2作為master的從機(jī),需要在slaver1和slaver2上配置master的相關(guān)信息。
也可以使用串行結(jié)構(gòu)
只不過(guò)是slaver2把slaver1認(rèn)為是master,配置的是slaver1的相關(guān)信息
?
在spring項(xiàng)目中,可以配置兩個(gè)數(shù)據(jù)源,一個(gè)讀,一個(gè)寫。然后DAO層的類分別注入不同的數(shù)據(jù)源,產(chǎn)生讀的bean和寫的bean,service調(diào)用的時(shí)候注入指定的bean就可以啦。
?
轉(zhuǎn)載于:https://www.cnblogs.com/wwzyy/p/11060400.html
總結(jié)
以上是生活随笔為你收集整理的使用docker部署mysql主从复制集群的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何查看或修改FANUC机器人的系统变量
- 下一篇: 分布式为什么使用Redis