前言:在毕设项目所运用到数据库读写分离,主数据库负责写,从数据库负责读,由于云服务器配置问题,就引入一主一从数据库。
一、拉取mysql
docker pull mysql
docker images
二、运行主从数据库
#主数据库 master
docker run -d -p 3301:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 mysql
#从数据库 slave
docker run -d -p 3302:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 mysql
#查看运行情况
docker ps
IDEA测试连接
三、配置主从数据库
-
master数据库
#进入master docker exec -it mysql-master /bin/bash #切换到/etc/mysql目录下 cd /etc/mysql #先安装vim apt-get update apt-get install vim #使用vim命令修改my.cnf vim my.cnf
编辑my.cnf
[mysqld] #设置server-id,注意要唯一 server-id=1 #开启二进制日志功能 log_bin=mysql-bin #二级制日志格式,有三种 row,statement,mixed binlog-format=ROW #控制binlog日志文件保留时间,超过保留时间的binlog日志会被自动删除 expire_logs_days=7 #同步的数据库,不配的话就是同步所有库 binlog-do-db=test #不同步的数据库 binlog-ignore-db=mysql binlog-ignore-db=information_schema binlog-ignore-db=performation_schema binlog-ignore-db=sys
#退出容器 exit #重启容器 docker restart mysql-master
-
slave
#进入slave docker exec -it mysql-slave /bin/bash #切换到/etc/mysql目录下 cd /etc/mysql #先安装vim apt-get update apt-get install vim #使用vim命令修改my.cnf vim my.cnf
编辑my.cnf
[mysqld] #设置server-id,注意要唯一 server-id=2 #relay_log配置中继日志 relay_log=mysql-relay-bin #设置为只读 read_only=1
#退出容器 exit #重启容器 docker restart mysql-slave
四、开启master-slave主从复制
-
master
docker exec -it mysql-master /bin/bash mysql -uroot -p123456
#创建用户 CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; #给用户授权 GRANT ALL PRIVILEGES ON *.* TO 'slave'@'%' WITH GRANT OPTION; #修改加密方式 ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; #刷新配置 FLUSH PRIVILEGES; #查看Master状态 show master status;
#退出mysql exit #退出容器 exit #查看本容器的ip docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master 172.17.0.4
-
slave
docker exec -it mysql-slave /bin/bash mysql -uroot -p123456
change master to #主数据库ip master_host='172.17.0.4', #主数据库用户名 master_user='slave', #主数据库密码 master_password='123456', #主数据库端口号 master_port=3306, #日志文件开始复制数据 master_log_file='mysql-bin.000004', #从哪个 Position 开始读,即上文中提到的 Position 字段的值 master_log_pos=708, #如果连接失败,重试的时间间隔 master_connect_retry=30;
#启动slave start slave; #查看slave show slave status \G;
-
如果失败的话,可以从容器IP、端口,用户和密码,Position值
五、测试主从数据库
-
master
-
slave