docker mysql8.0.18 一主一从 实现 主从复制

#开始前需要先把linux的防火墙关掉
#查看防火墙状态
systemctl status firewalld

#关闭防火墙
systemctl stop firewalld

启动两台MySQL

#拉取mysql8.0.18镜像
docker pull mysql:8.0.18

#启动第一个mysql(主)(暴露33060端口)
docker run -p 33060:3306 --name mysql8_33060 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.18
#启动第二个mysql(从)(暴露33061端口)
docker run -p 33061:3306 --name mysql8_33061_s1 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.18

# 查看运行的mysql容器
docker ps

在这里插入图片描述

对MySQL的配置文件进行修改

#进入主mysql
docker exec -it mysql8_33060 /bin/bash

#进入容器后,默认是没vim的,所以需要先安装vim才可以查看修改配置文件
#先更新下apt-get的源,下载速度快一些
mv /etc/apt/sources.list /etc/apt/sources.list.bak && \
    echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >/etc/apt/sources.list && \
    echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list && \
    echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list && \
    echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list


#然后需要更新apt-get
apt-get update
#安装vim
apt-get install vim -y
#打开配置文件
vim /etc/mysql/my.cnf
#然后复制下面的配置,黏贴到[mysqld]下


#设置主mysql的id
server-id = 1
#启用二进制日志
log-bin=mysql-bin
#设置logbin格式
binlog_format = STATEMENT

#然后按esc键,输入 :wq 退出
#退出容器
exit

在这里插入图片描述

#然后进入从mysql
docker exec -it mysql8_33061_s1 /bin/bash

#安装vim
mv /etc/apt/sources.list /etc/apt/sources.list.bak && \
    echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >/etc/apt/sources.list && \
    echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list && \
    echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list && \
    echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list

apt-get update

apt-get install vim -y

vim /etc/mysql/my.cnf


#设置从mysql的id
server-id = 2
#启用中继日志
relay-log = mysql-relay

# :wq 退出
#退出容器
exit

#重启两个mysql容器
docker restart mysql8_33060
docker restart mysql8_33061_s1

配置主从复制

#进入主mysql容器
docker exec -it mysql8_33060 /bin/bash

#登录主mysql
mysql -uroot -p123456 -h10.211.55.26 -P33060

#创建用于主从复制的账号db_sync,密码db_sync
create user 'db_sync'@'%' identified with mysql_native_password by 'db_sync';
#授权
grant replication slave on *.* to 'db_sync'@'%';

#刷新权限
FLUSH PRIVILEGES;

#确认位点 记录下文件名以及位点(重启或者刷新都会改变)
show master status;

# mysql-bin.000001
# 823

#退出主mysql
exit

在这里插入图片描述

#登录从mysql
mysql -uroot -p123456 -h10.211.55.26 -P33061

#先停止同步
STOP SLAVE;

#修改从库指向到主库,使用上一步记录的文件名以及位点
# master_host docker容器linux的ip地址
# master_port 主mysql暴露的端口
# master_user 主mysql的用户名
# master_password 主mysql的密码
#(最后两项修改成刚刚从主mysql查到的,主mysql每次刷新权限或者重启时,这两个值都会改变,所以每次都需要查看是否相同)
CHANGE MASTER TO
master_host = '10.211.55.26',
master_port = 33060,
master_user = 'db_sync',
master_password = 'db_sync',
master_log_file = 'mysql-bin.000001',
master_log_pos = 823;

#启动同步
START SLAVE;

#查看Slave_IO_Runing和Slave_SQL_Runing字段值都为Yes,表示同步配置成功。
show slave status \G;

#退出mysql
exit
#退出容器
exit

在这里插入图片描述

测试

#在主mysql创建数据库
create database test;

#在从mysql上查看
show databases;


#在主mysql创建数据表并插入数据
use test;
create table t_user(
	`t_id` int primary key,
	`t_name` varchar(20) not null
);
insert into t_user values(1, 'angenin');

#在从mysql上查看
use test;
select * from t_user;

主mysql:
在这里插入图片描述
从mysql:
在这里插入图片描述

实现mysql的读写分离可以用Sharding-Sphere中间件,此中间件可以进行分库分表,读写分离。
这是看尚硅谷的Sharding-Sphere视频记的笔记:Sharding-Sphere 学习笔记

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Docker中设置MySQL主从复制,您可以按照以下步骤进行操作: 1. 首先,创建一个Docker容器来运行主数据库。假设您已经安装了Docker并具有基本的Docker知识。在命令行中运行以下命令: ``` docker run --name mysql-master -e MYSQL_ROOT_PASSWORD=your_password -p 3306:3306 -d mysql ``` 请将"your_password"替换为您所需的实际密码。 2. 确保主数据库容器正在运行。您可以运行以下命令来检查容器状态: ``` docker ps ``` 3. 创建一个Docker容器来运行从数据库。在命令行中运行以下命令: ``` docker run --name mysql-slave -e MYSQL_ROOT_PASSWORD=your_password -p 3307:3306 -d mysql ``` 请注意,这里我们使用的是不同的端口来避免与主数据库冲突。同样,将"your_password"替换为您所需的实际密码。 4. 确保从数据库容器正在运行。 5. 进入主数据库容器。运行以下命令: ``` docker exec -it mysql-master bash ``` 6. 在主数据库容器中,编辑MySQL配置文件以启用二进制日志。运行以下命令: ``` vi /etc/mysql/my.cnf ``` 将以下行添加到文件的末尾: ``` [mysqld] log-bin=mysql-bin server-id=1 ``` 保存并退出文件。 7. 重新启动主数据库容器,使更改生效。运行以下命令: ``` service mysql restart ``` 8. 进入从数据库容器。运行以下命令: ``` docker exec -it mysql-slave bash ``` 9. 在从数据库容器中,编辑MySQL配置文件以启用主从复制。运行以下命令: ``` vi /etc/mysql/my.cnf ``` 将以下行添加到文件的末尾: ``` [mysqld] server-id=2 replicate-do-db=my_database ``` 这里的"my_database"是您要复制的数据库名称。如果您只想复制特定数据库,请将其替换为您的数据库名称。 保存并退出文件。 10. 重新启动从数据库容器,使更改生效。运行以下命令: ``` service mysql restart ``` 11. 在主数据库容器中,创建一个新用户并授予复制权限。运行以下命令: ``` mysql -u root -p -e "CREATE USER 'replication_user'@'%' IDENTIFIED BY 'your_password';" mysql -u root -p -e "GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';" mysql -u root -p -e "FL

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值