1、创建主机的挂载目录和下载
mkdir -p /docker/mysql/data
mkdir -p /docker/mysql/log
mkdir -p /docker/mysql/conf1.1、下载mysql8.0.18版本
docker pull mysql:8.0.182、配置mysql的配置文件
cd /docker/mysql/conf
vim my.cnf
按i或a进入编辑模式[mysqld]
#主服务器唯一id
server-id=101
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
#防止数据库导入导出出现secure-file-priv为NULL的错误,这里的参数你可以根据你自己的要求来配置,NULL是不允许导入导出,/test是只允许在你设置的特定目录下导入导出,这里配置的是任意目录下的。
secure-file-priv="/"
#最大连接数
max_connections=1024
#启用log-bin二进制日志
log-bin=mysql-bin
# 数据表默认时区
default-time-zone='+08:00'3、后台启动mysql
docker run -p 3306:3306 --name master \
-v /docker/mysql/log:/var/log/mysql \
-v /docker/mysql/data:/var/lib/mysql \
-v /docker/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.0.184、进入容器实例访问
docker exec -it master /bin/bash5、进入mysql内部 这里进入容器内部并不需要密码(进不了就自己输入密码,我的是不用输入密码,直接回车就可以了)
mysql -uroot
#正常来说要输入密码才能访问
mysql -uroot -p你的密码6、更新访问限权(允许外部连接)
use mysql;
update user set host = "%" where user = "root";
flush privileges;7、设置密码(之前启动容器时设置的密码并未生效)
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';8、刷新
flush privileges;9、设置开机自启动
docker update master --restart=always10、用软件访问自己的mysql主机 访问成功后就可以开始配置主从复制
这里用软件连接数据库失败的,看看你的端口号是否开放,云服务的要看看你的安全组有没有开放3306端口号,下面的从机也一样,这里附上防火墙操作命令,用云服务器和能访问到的可以跳过这里
# 查看防火墙状态
systemctl status firewalld
# 开启防火墙
systemctl start firewalld
# 关闭防火墙
systemctl stop firewalld
# 开启防火墙
service firewalld start
# 若遇到无法开启
先用:systemctl unmask firewalld.service
然后:systemctl start firewalld.service
# 设置对外端口
添加指定需要开放的端口:
firewall-cmd --add-port=6379/tcp --permanent
重载入添加的端口:
firewall-cmd --reload
查询指定端口是否开启成功:
firewall-cmd --query-port=6379/tcp10.1、在主机上建立从机,就相当于在主机数据库上建立一个访问用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';10.2、设定成功后就可以查看自己的主机数据库的状态,查到状态后就不要操控主数据库了,因为这个位置不是固定的,你在主机刷新一下,它的位置就会变动的
show status master;
这些数据截图先截图下来,等下配置从机的时候要用到
10.3、创建从机所要的挂载文件
mkdir -p /docker/mysql-slave/data
mkdir -p /docker/mysql-slave/log
mkdir -p /docker/mysql-slave/conf10.4、编辑从机的配置文件 进入从机挂载的conf目录下 vim my.cnf
[mysqld]
#主服务器唯一id
server-id=102
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
#防止数据库导入导出出现secure-file-priv为NULL的错误,这里的参数你可以根据你自己的要求来配置,NULL是不允许导入导出,/test是只允许在你设置的特定目录下导入导出,这里配置的是任意目录下的。
secure-file-priv="/"
#最大链接数
max_connections=1024
#启用log-bin二进制日志
log-bin=mysql-bin
# 数据表默认时区
default-time-zone='+08:00'
#配置中继日志
relay_log=mall-mysql-relay-bin
#表示slave将复制事件写进自己的二进制日志,想提高读写效率,这个1可改为0,只读不写
log_slave_updates=1
#slave设置为只读
read_only=110.5、启动从服务器的实例
docker run -p 3307:3306 --name slave \
-v /docker/mysql-slave/log:/var/log/mysql \
-v /docker/mysql-slave/data:/var/lib/mysql \
-v /docker/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.0.1810.6、进入从机内部 mysql-uroot -p
change master to master_host='自己的主机ip' , master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000006', master_log_pos=155, master_connect_retry=30,GET_MASTER_PUBLIC_KEY=1;masterhost='你的主机ip地址'
masterlogfile='你的file'
masterlogpos='你自己的Position'
show status slave \G现在配置还没生效

10.7、重启从服务器
#退出容器后重启mysql从机服务
docker restart slave然后再进去从机查看状态
show status slave \G

有两个yes就代表我们已经成功配置好mysql的主从复制
10.8、搭建了这么久,我们就来一个简单的测试吧 (操作主库)
create database db1;
use db1;
CREATE TABLE IF NOT EXISTS `test`( `test_id` INT UNSIGNED AUTO_INCREMENT, `test_title` VARCHAR(100) NOT NULL, `test_author` VARCHAR(40) NOT NULL, `test_date` DATE,PRIMARY KEY ( `test_id` ))ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO test (test_title, test_author, test_date) VALUES ("搭建 mysql主从复制", "HelloWorld", NOW());

可以看到所测试的数据在从库中也能读到
10.9、个人出错

这个时候就表示主从配置出错了,出错一般会有提示的,我们继续往下看
我是在Last_IO_Error:这里发现以下错误 我估摸着它的大致意思就是caching_sha2_password插件认证出错,查了官网之后才发现我用mysql8配置主从复制要加get_public_master_public_key=1
retry-time: 30 retries: 5 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.
11、总结
以上就是docker搭建mysql集群的所有步骤,这里搭建的只是mysql主从复制最简单的单向主从模式,二进制文件的内存量这里没有去设置,需要设置的小伙伴可以自己去设置一下。最后加上mysql主从复制的几种模式的原理图;





版权声明:本文为weixin_49807584原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。