搭建mhysql主从数据库
一:创建主(master)服务器
1.创建存储文件夹
1.创建主和从的文件夹
mkdir -p software/mysql/3306 software/mysql/3310
2.分别在3306和3310 创建conf data 文件夹
cd software/mysql/3306
mkdir conf data
cd software/mysql/3310
mkdir conf data
2.从容器中拷贝原始配置文件my.cnf
1.创建mytest容器
docker run -it --name mytest -e MYSQL_ROOT_PASSWORD=123 -d mysql
2.进入主文件
cd software/mysql/3306/conf
3.拷贝my.cnf
#docker cp 容器名称: 文件地址 目标地址 ./ 当前位置
docker cp mytest:/etc/mysql/my.cnf ./
3.搭建主(master)服务器(docker容器)
docker run \
-it \
--name mysql_3306 \
--privileged \
--network wn_docker_net \
--ip 172.18.12.2 \
-p 3306:3306 \
-v /usr/local/software/mysql/3306/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/software/mysql/3306/data:/var/lib/mysql \
-v /usr/local/software/mysql/3306/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123 \
-d mysql
1 -it 交互式
2 —name 容器唯一名称
3 -p 映射端口 linux的访问端口: 容器内的运行程序端口(3320:3306)
4 -privileges 开放权限 (默认值true)
5 —network 自定义网络
—ip 自定义ip
6 -v 卷: 与宿主(linux)挂载文件或文件夹
7 -e 设置容器中运行程序的环境参数 MYSQL_ROOT_PASSWORD=123
8 -d 镜像名称 后台运行
4.防火墙开启指定端口
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-ports
5.master服务器配置:my.cnf
1.先找到My.cnf所在位置
cd software/mysql/3306/conf
2.修改my.cnf
vim my.cnf
3.配置如下(编辑: 按下i键;退出编辑:按下esc键;退出并存储 :wq)
server-id=200
log_bin=wnhz-master-logbin
binlog_format=row
二:创建从(slave)服务器
1.从容器中拷贝原始配置文件my.cnf
1.先进入到3310/conf
cd software/mysql/3310/conf
2.拷贝文件
cp my.cnf /usr/local/software/mysql/3310/conf
3.修改my.cnf
server-id=201
log_bin=wnhz-slave-01-logbin
relay_log=wnhz-mysql-relay-logbin
read-only=1
2.创建slave容器
docker run \
-it \
--name mysql_3310 \
--privileged \
--network wn_docker_net \
--ip 172.18.12.3 \
-p 3310:3306 \
-v /usr/local/software/mysql/3310/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/software/mysql/3310/data:/var/lib/mysql \
-v /usr/local/software/mysql/3310/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123 \
-d mysql
3.master创建用户slave进行主从关联(进入主master进行设置)
create user 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123';
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';
flush privileges;
4.查看master数据
show master status;
5.进入slave容器,连接mysql(对应上一步查的数据File、Position)
change master to master_host='172.18.12.2', master_user='slave',master_password='123',MASTER_LOG_FILE='wnhz-master-logbin.000001',MASTER_LOG_POS=2647;
6.启动slave
start slave;
7.查询是否成功
show slave status \G;
7.配置从slave只读权限
create user 'sd'@'%' IDENTIFIED WITH mysql_native_password BY '123';
GRANT SELECT ON *.* TO 'sd'@'%';
flush privileges;
8.如果查询后不是两个YES
1.关闭slave
stop slave;
- 重置slave
reset slave;
3.查询master的数据
show master status;
4.重新配置
change master to master_host='172.18.12.2', master_user='slave',master_password='123',MASTER_LOG_FILE='wnhz-master-logbin.000001',MASTER_LOG_POS=2647;
5.重新运行slave
start slave;
三:如何创建用户并给用户授权
1.创建一个名为 ‘slave’ 的用户
create user 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123';
--这个命令创建了一个名为 'slave' 的用户,并指定该用户可以从任何主机通过 '%' 的通配符进行连接。
--该用户的身份验证方式是使用 mysql_native_password 插件。
--用户的密码被设置为 '123',你可以根据需要更改密码。
2.权限
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';
--这个命令为 'slave' 用户授予了复制从服务器和复制客户端的权限。
--'REPLICATION SLAVE' 权限允许用户作为从服务器(slave)连接到主服务器(master)并进行复制操作。
--'REPLICATION CLIENT' 权限允许用户作为复制客户端连接到其他服务器以获取复制信息。
3.刷新MySQL 的权限配置
flush privileges;
--这个命令刷新了 MySQL 的权限配置,确保新添加的用户和权限生效。
附:设置只读权限的命令
create user 'sd'@'%' IDENTIFIED WITH mysql_native_password BY '123';
GRANT SELECT ON *.* TO 'sd'@'%';
flush privileges;