Docker部署mysql5.6读写分离

首先说下为什么要使用docker,因为在你没有资金买更多的服务器的时候,docker就可以让你实现一台机子进行装无数相同的程序.所以就可以在一台服务器上轻松装2个mysql,然后进行主从配置.

docker安装文章可以直接百度,https://www.cnblogs.com/rookie404/p/5965518.html

1.安装docker及对应容器

首先安装好docker直接启动,docker会自己拉去对应的mysql版本,33306:3306代表把容器里的3306映射到宿主机的3306,为了不跟宿主机原来的mysql3306冲突,所以换为33306.

 docker run -d -p 33306:3306 -v /home/mysql:/home --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

因为docker的mysql5.6安装后会有字符集的问题所以要做以下操作,进入到容器内部

docker exec -it mysql /bin/bash
#进入容器后
mysql -uroot -p12346
SHOW VARIABLES LIKE 'character_set_%'; #查看字符集
SET NAMES 'utf8'; #先解决外部访问乱码的问题
#输完命令后,按ctrl d退出
#在容器里安装完vim(跟Ubuntu一样的安装流程)
vim etc/mysql/mysql.conf.d/mysqld.cnf 
#接下来配置成如下图这样

 

Docker部署mysql5.6读写分离_第1张图片

2.进行主库配置

#配置完毕后
docker restart mysql; #重启mysql容器
#再通过上面的一些流程,进入mysql,然后查看字符集是否正常.
#然后退出容器后,在宿主机操作   docker commit  容器名称  要保存成的镜像名称
docker commit mysql mysql2
#保存完了之后,直接创建另一个容器,因为是上一个容器的复刻所以不需要再配置字符集;
docker run -d --name mysql2 -p 33307:3306 mysql2
#接下来配置读写分离,首先进入主库
docker exec -it mysql /bin/bash
vim etc/mysql/mysql.conf.d/mysqld.cnf 
#在[mysqlld]进行配置
[mysqld]  
#[必须]服务器唯一ID,默认是1,一般取IP最后一段  
server_id = 1  
#[必须]启用二进制日志  
log_bin=mysql-bin  
#需要同步的数据库名  多个库以逗号分隔  
binlog-do-db =udbname
#若涉及及同步函数或者存储过程需要配置,否则主备会产生异常不能同步  
log_bin_trust_function_creators=TRUE  

操作完成保存退出,看看是否类似下图

Docker部署mysql5.6读写分离_第2张图片

完成后,退出容器ctrl d(确认自己是退出容器,而不是只退出了mysql),然后docker restart mysql  进行重启

接下来继续进入主库容器
docker exec -it mysql /bin/bash
mysql -uroot -p123456
show master status;  #查看配置情况类似下图即为成功配置

3.从库配置

docker exec -it mysql2 /bin/bash #进入容器
mysql -uroot -p123456
stop slave;  #关闭slave;
#ctrl d  退出mysql
vim etc/mysql/mysql.conf.d/mysqld.cnf #接着编辑
[mysqld]
server-id=2
#log_bin=/var/log/mysqlslave-bin.log  #这里的log_bin和下面的log-bin是一个意思,配置其一就好了
log-bin=mysql-bin
#你要复制的数据库(因为主库负责插入,所以需要复制主库的数据)
replicate-do-db=udbname
replicate-ignore-db=mysql
replicate-ignore-db=infomation_schema

#配置完毕后看下是否与下图类似
#如果类似,就退出容器到宿主机

Docker部署mysql5.6读写分离_第3张图片

接下来重启从库容器 

docker restart mysql2  #重启从库容器
docker exec -it mysql  /bin/bash #进入容器准备配置主从复制时的帐号密码(我这边用的root,当然你可以创建为别的)
mysql -uroot -p123465
change master to master_host='172.17.0.1', master_port=33306, master_user='root', master_password='123456',master_log_file='mysql_bin.000002',master_log_pos=120;

#aster_log_pos分别对应主库show master status; 中查询出来的 File和Position
#操作完毕后
start slave;  #启动slave

查询结果中的以下两项都为yes,则说明配置成功。
Slave_IO_Running: Yes

Slave_SQL_Running: Yes
#参考下图

Docker部署mysql5.6读写分离_第4张图片

到这里就全部配置好了,你可以去主库进行对你设置需要同步的数据库增删改,然后去从库看看是否也变得跟主库操作后一样的结果.

之后有空会把spring boot mybatis plus+dubbo的读写分离配置写上来.

你可能感兴趣的:(Docker部署mysql5.6读写分离)