首先说下为什么要使用docker,因为在你没有资金买更多的服务器的时候,docker就可以让你实现一台机子进行装无数相同的程序.所以就可以在一台服务器上轻松装2个mysql,然后进行主从配置.
docker安装文章可以直接百度,https://www.cnblogs.com/rookie404/p/5965518.html
首先安装好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 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
操作完成保存退出,看看是否类似下图
完成后,退出容器ctrl d(确认自己是退出容器,而不是只退出了mysql),然后docker restart mysql 进行重启
接下来继续进入主库容器
docker exec -it mysql /bin/bash
mysql -uroot -p123456
show master status; #查看配置情况类似下图即为成功配置
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 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
#参考下图
到这里就全部配置好了,你可以去主库进行对你设置需要同步的数据库增删改,然后去从库看看是否也变得跟主库操作后一样的结果.
之后有空会把spring boot mybatis plus+dubbo的读写分离配置写上来.