前言
哎,为了学这个还特意整了两台云服务器,造孽呀
这里的情况是一主一从,mysql是8.3的
我的配置是,两台阿里云的云服务器,因为是一个区的所以彼此可以用私网进行访问(为了搜索docker在不同主机之间通信绞尽脑汁,最后发现可以用私网访问对方容器,还是蛮幸运的)
配置
云服务器两台(务必一个地方一个区,能用私网访问)
mysql 8.3
docker 25.0.3
master 主机
- 生成mysql-master容器
- 设置master.cnf
- 重启容器应用配置
- 进入容器,输入show master status\G并记录下数据,设置从(奴隶)主机需要用
slave 主机
- 重复上述master中1、2、3步骤
- 注意,重复2步骤的时候 需要修改server-id
- 进入容器内,登录mysql 设置master,并启动slave
master配置
生成容器
docker run -d -p 3306:3306 --name mysql8-master --restart=always --privileged=true -v /data/mysql/conf:/etc/mysql/conf.d -v /data/mysql/logs:/logs -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai mysql:latest
添加新的mysql配置文件
可以在/data/mysql/conf 内额外新增即可
[mysqld]
server-id = 1 #设置主服务器的id号为1 从服务器不能为1 需要区分
log-bin=mysql-bin # 字符串 写什么都行
binlog_format=mixed
#只保留7天的二进制日志,以防磁盘被日志占满
binlog_expire_logs_seconds=604800 # mysql8以后新的设置方式
#不备份的数据库
binlog-ignore-db=information_schema # 那些不备份有多少写多少
binlog-ignore-db=performation_schema
binlog-ignore-db=sys
binlog-ignore-db=mysql
重启mysql应用变更
docker restart mysql8-master
记录master内状态信息
有用的信息是文件名和位置信息两个
slave主机配置
生成容器
docker run -d -p 3306:3306 --name mysql8-slave --restart=always --privileged=true -v /data/mysql/conf:/etc/mysql/conf.d -v /data/mysql/logs:/logs -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai mysql:latest
添加配置文件salve.cnf
[mysqld]
server-id = 2 #设置主服务器的id号为1
log-bin=mysql-bin-slave
binlog_format=mixed
#只保留7天的二进制日志,以防磁盘被日志占满
binlog_expire_logs_seconds=604800
#不备份的数据库
binlog-ignore-db=information_schema
binlog-ignore-db=performation_schema
binlog-ignore-db=sys
binlog-ignore-db=mysql
relay-log=mysql-relay-bin # 开启中继
重启容器
docker restart mysql8-slave
进入从服务器的mysql中设置master信息
change master to master_host='master的ip',master_port=3306,master_user=slave,master_password=123456,master_log_file='主节点记录信息中的文件名',master_log_pos=主节点记录信息中的位置,get_master_public_key=1;
start slave;
注意:get_master_public_key=1可以防止报出从节点登不上主节点的错误
查看salve状态
show slave status\G
出现这两个yes即可
坑
重启计算机需要重新设置slave中master的信息;
如果第一遍设置出错。第二遍设置的时候先运行 reset slave;
先这样
提醒
我偷懒了一步,需要在master的mysql内 创建 slave账号,写的急,忘了整上去了
#创建账号
create user 'slave'@'%' identified by '123456';
#授权
grant replication slave on *.* to 'slave'@'%';
#刷新
flush privileges;