欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > docker集群部署主从mysql

docker集群部署主从mysql

2024/11/30 8:57:56 来源:https://blog.csdn.net/salonzhou/article/details/140192256  浏览:    关键词:docker集群部署主从mysql

搭建一个mysql集群,1主2从,使用docker容器

一、创建docker的mysql镜像

下次补上,因为现在很多网络不能直接pull,操作下次补上。

二、创建mysql容器

创建容器1

docker run -it -d --name mysql_1 -p 7001:3306 --net mynet --ip 172.18.0.2 -m 400m -v /root/mysql_1/data:/var/lib/mysql -v /root/mysql_1/config:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=abc123456 -e TZ=Asia/Shanghai --privileged=true mysql:5.7 --lower_case_table_names=1

执行成功后,

查看:docker ps -a

说明部署成功了,先暂停这个容器:docker stop mysql_1

接着在/root/mysql_1/config/下创建my.cnf

[mysqld]
character_set_server=utf8
server_id=1
log_bin=mysql_bin
relay_log=relay_bin
log-slave-updates=1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

重新启动mysql_1容器:docker start mysql_1

进入容器,docker exec -it mysql_1 bash

添加数据库账号与设置权限

mysql -uroot -pabc123456

添加一个账号为sync,密码为:abc123456的有同步数据权限的账号,这个步骤参考以下方法。如果能用navicat连接上这个数据库,也可以用工具直接创建这个账号与赋权限,个人测试的直接授所有权限。


mysql 创建用户
方法一:使用CREATE USER语句来创建用户。以下是一个示例:CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';该语句将在MySQL数据库中创建一个名为'username'的用户,并为该用户设置密码为'password'。用户只能从本地主机连接到数据库。方法二:使用GRANT语句创建用户。以下是一个示例:GRANT ALL PRIVILEGES ON . TO 'username'@'localhost' IDENTIFIED BY 'password';该语句将为名为'username'的用户授予对所有数据库和表的全部权限,并设置密码为'password'。用户只能从本地主机连接到数据库。注意:在实际生产环境中,应根据需要为用户分配适当的权限,而不是赋予全部权限。方法三:使用INSERT INTO语句将用户信息插入到mysql.user表中。以下是一个示例:INSERT INTO mysql.user (User, Host, Password) VALUES ('username', 'localhost', PASSWORD('password'));该语句将在mysql.user表中插入一条记录,包含用户名为'username'、主机为'localhost'和使用PASSWORD函数加密的密码。用户只能从本地主机连接到数据库。需要注意的是,为了使新用户生效,必须使用FLUSH PRIVILEGES语句刷新MySQL的权限缓存:FLUSH PRIVILEGES;

创建容器2

docker run -it -d --name mysql_2 -p 7002:3306 --net mynet --ip 172.18.0.3 -m 400m -v /root/mysql_2/data:/var/lib/mysql -v /root/mysql_2/config:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=abc123456 -e TZ=Asia/Shanghai --privileged=true mysql:5.7 --lower_case_table_names=1

执行成功后,

查看:docker ps -a

说明部署成功了,先暂停这个容器:docker stop mysql_2

接着在/root/mysql_2/config/下创建my.cnf

[mysqld]
character_set_server=utf8
server_id=2
log_bin=mysql_bin
relay_log=relay_bin
read-only=1
#log-slave-updates=1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

重新启动mysql_2容器:docker start mysql_2

使用navicat连接,并设置

stop slave;change master to master_host='172.18.0.2',master_port=3306,master_user='sync',master_password='abc123456'start slave;show slave status;

一条条执行,前面都是执行结果为OK

最后一条的显示为:这就说明从库设置成功!

创建容器3

docker run -it -d --name mysql_2 -p 7003:3306 --net mynet --ip 172.18.0.4 -m 400m -v /root/mysql_3/data:/var/lib/mysql -v /root/mysql_3/config:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=abc123456 -e TZ=Asia/Shanghai --privileged=true mysql:5.7 --lower_case_table_names=1

执行成功后,

查看:docker ps -a

说明部署成功了,先暂停这个容器:docker stop mysql_3

接着在/root/mysql_3/config/下创建my.cnf

[mysqld]
character_set_server=utf8
server_id=3
log_bin=mysql_bin
relay_log=relay_bin
read-only=1
#log-slave-updates=1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

重新启动mysql_3容器:docker start mysql_3

使用navicat连接,并设置

stop slave;change master to master_host='172.18.0.2',master_port=3306,master_user='sync',master_password='abc123456'start slave;show slave status;

一条条执行,前面都是执行结果为OK

最后一条的显示为:这就说明从库设置成功!

在主库上创建一个数据库与数据表

在从库上自动添加了这个库与表

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com