本篇内容介绍了“Docker怎么在一台服务器上安装和配置Mysql集群”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
1.从docker hub下载mysql5.6的镜像
docker pull mysql:5.6
2.使用mysql5.6镜像运行4台mysql服务,用端口号区分
前期准备工作
# 在本机创建四个目录,分别用了存储4台mysql服务的数据,日志以及配置文件 mkdir /data/mysql cd /data/mysql mkdir mysql3307 mysql3308 mysql3309 mysql3310 cd mysql3307 mkdir conf logs data cp -r conf/ data/ logs/ ../mysql3308 cp -r conf/ data/ logs/ ../mysql3309 cp -r conf/ data/ logs/ ../mysql3310
创建并运行4台mysql容器,每台服务器的root密码都是liuhaizhuang
cd /data/mysql/mysql3307 docker run -p 3307:3306 --name mysql3307 \ -v $PWD/conf:/etc/mysql/conf.d \ -v $PWD/logs:/logs \ -v $PWD/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=liuhaizhuang \ -d mysql:5.6
cd /data/mysql/mysql3308 docker run -p 3308:3306 --name mysql3308 \ -v $PWD/conf:/etc/mysql/conf.d \ -v $PWD/logs:/logs \ -v $PWD/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=liuhaizhuang \ -d mysql:5.6
cd /data/mysql/mysql3309 docker run -p 3309:3306 --name mysql3309 \ -v $PWD/conf:/etc/mysql/conf.d \ -v $PWD/logs:/logs \ -v $PWD/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=liuhaizhuang \ -d mysql:5.6
cd /data/mysql/mysql3310 docker run -p 3310:3306 --name mysql3310 \ -v $PWD/conf:/etc/mysql/conf.d \ -v $PWD/logs:/logs \ -v $PWD/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=liuhaizhuang \ -d mysql:5.6
到此4台mysql服务器容器已经全部创建且启动!
如果想远程链接这4台mysql,需要防火墙开启3307,3308,3309,3310
# 编辑iptables vim /etc/sysconfig/iptables # 加上如下4行 退出保存 -A INPUT -p tcp -m state --state NEW -m tcp --dport 3307 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 3308 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 3309 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 3310 -j ACCEPT
重启防火墙,到此远程可以链接上新装的4台mysql了
systemctl restart iptables.service
说明已经全部链接上!下一步就可以配置主从复制了
3.配置主从集群
master:端口为3307的mysql
slaves:端口为3308,3309,3310的mysql
配置master
# 切换到mysql3307的配置文件目录 cd /data/mysql/mysql3307/conf # 新增my.cnf文件且加上如下内容 touch my.cnf vim my.cnf
server-id:同一局域网内要唯一就可以
log-bin:开启二进制日志功能,后面的名称可以随便取
重启mysql3307对应的容器
docker restart mysql3307
在master数据库创建数据同步用户;且授予同步用户 replication slave 和 replication client 权限;用于主从同步数据
mysql> create user 'slave_user'@'%' identified by 'liuhaizhuang'; Query OK, 0 rows affected mysql> grant replication slave,replication client on *.* to 'slave_user'@'%'; Query OK, 0 rows affected mysql>
配置slave的my.cnf文件
# 切换到mysql3308配置文件目录 cp /data/mysql/mysql3308/conf touch my.cnf vim my.cnf
[mysqld] # 保证局域网内唯一 server-id=2 # 开启二进制,以防作为其他salve的master使用 log-bin=mysql3308-bin # 配置中继日志 relay_log=mysql3308-relay-bin # 让slave只读,只参数值限制普通用户,root用户还是可以增删改 read_only=1
重启mysql3308对应的容器
docker restart mysql3308
接下来以此类推配置mysql3309和mysql3310从库
链接master和slave
进入mysql3307命令行,执行show master status;查看File和Position字段的值,后面要使用到
mysql> show master status; +----------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +----------------------+----------+--------------+------------------+-------------------+ | mysql3307-bin.000001 | 434 | | | | +----------------------+----------+--------------+------------------+-------------------+ 1 row in set mysql>
进入各个slave命令行,分别执行如下命令:
change master to master_host='172.18.0.5', master_user='slave_user', master_password='liuhaizhuang', master_port=3306, master_log_file='mysql3307-bin.000001', master_log_pos= 434, master_connect_retry=30;
参数说明:
master_host : master的地址,指的是容器的独立ip,可以通过docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id
查询容器的ip
[root@VM_0_10_centos ~]# docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql3307 172.18.0.5 [root@VM_0_10_centos ~]#
master_port:master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 slave 从哪个日志文件开始复制数据,即上文中提到的 file 字段的值
master_log_pos:从哪个 position 开始读,即上文中提到的 position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
mysql> change master to master_host='172.18.0.5', master_user='slave_user', master_password='liuhaizhuang', master_port=3306, master_log_file='mysql3307-bin.000001', master_log_pos= 434, master_connect_retry=30; Query OK, 0 rows affected mysql>
进入slave命令使用start slave;开启主从复制过程;查询主从同步状态命令是:show slave status;
测试主从复制
在master新见一个数据库,然后观察其他几个从库是否自动同步数据
“Docker怎么在一台服务器上安装和配置Mysql集群”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。