MySQL8-主从搭建

本文详细介绍了如何配置MySQL的主从同步,包括关闭防火墙、安装MySQL、修改密码策略、创建主从同步账户、开启二进制日志、设置server-id、重置偏移量、注册从节点等步骤,确保数据在多个服务器间安全、有效地复制。

三台服务器

192.168.56.70	主
192.168.56.71	从
192.168.56.72	从

关闭防火墙

停止:systemctl stop firewalld 
禁用:systemctl disable firewalld

配置免密

Linux配置免密

主从节点都安装启动

wget https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm
yum localinstall mysql80-community-release-el7-5.noarch.rpm
yum clean all
yum makecache
yum install -y mysql-community-server
systemctl start mysqld
systemctl status mysqld
systemctl enable mysqld
yum list |grep mysql-community

修改MySQL密码

#查看root初始化密码
grep "password" /var/log/mysqld.log

mysql -uroot -p'取到的初始化密码'
#分别登录三台mysql
mysql -uroot -p'/=2KlUfHs>.o'
mysql -uroot -p'EiQtusd1=QL9'
mysql -uroot -p'O<E.GRsW_5ku'
--修改密码策略,三台都执行
--第一次 安装好mysql,要先修改下密码,再设置简单密码策略,否则会报错ERROR 1820 (HY000)
alter user user() identified by "Mysql=1357";

set global validate_password.policy=LOW;
set global validate_password.mixed_case_count=0;
set global validate_password.number_count=0; 
set global validate_password.special_char_count=0; 
set global validate_password.length=1;
set global validate_password.check_user_name='OFF';
--这里将roo密码修改为 root
alter user user() identified by 'root';
登录MySQL
mysql -uroot -p'root'

主节点添加主从同步账户(只在主节点执行)

--主节点添加主从同步账户
--只在主节点执行
CREATE USER 'copy'@'%' IDENTIFIED BY '123456';
alter user 'copy'@'%' identified with mysql_native_password by '123456';
grant all privileges on *.* to 'copy'@'%' with grant option;

开启二进制日志文件和添加server-id

#先停止MySQL
systemctl stop mysqld
vim /etc/my.cnf
--主节点添加
log-bin=mysql-bin
server-id=70
--从节点1添加,从数据库开启只读模式,避免和 主节点数据不一致
server-id=71
read_only = 1
super_read_only = 1
--从节点2添加,从数据库开启只读模式,避免和 主节点数据不一致
server-id=72
read_only = 1
super_read_only = 1
--注意,注意,注意,只有master节点有mysql-bin配置,每个节点的server-id必须不同
#启动MySQL
systemctl start mysqld

主节点mysql重置偏移量(只在主节点执行)

#只在主节点执行
mysql -uroot -proot
--重置偏移量如果不重置,从节点也会创建copy用户
reset master;
show master status;
--获取到二进制文件名字 : 
--mysql-bin.000001
--Position : 157
--这里获取的信息之后会用到

注册从节点(只在从节点执行)

--只在从节点执行
--参数解析:
--master_host : 主节点主机
--master_user : 第2步创建的主从同步账户
--master_port : 主节点mysql服务的端口号,因为没有这里改过所以是 3306
--master_password : 第2步创建的主从同步账户的密码
--master_log_file : 第4步获取的二进制文件名字
--master_log_pos : 第4步获取的Position值

stop slave;
reset slave;
change master to master_host='192.168.56.70',master_user='copy',master_port=3306,master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=157;

--启动 启动所有从节点的slave
start slave;
show slave status \G;
--以下两项必须是yes
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
--如果出现Slave_IO_Running: Connecting
--①可能防火墙没关
--②可能创建copy用户的时候,从节点也执行创建了,从节点删除copy用户,重新执行本步骤

测试主从

主节点创建数据库,在从节点查询;

MySQL主从修复

重新执行步骤:
主节点mysql重置偏移量(只在主节点执行)
注册从节点(只在从节点执行)

在使用 Docker Compose 配置 MySQL 8主从复制环境时,需要通过 `docker-compose.yml` 文件定义多个服务,并结合自定义配置文件和初始化脚本实现主从同步。 ### 目录结构 通常建议创建一个专用目录用于存放所有相关文件。例如: ``` mysql-cluster/ ├── docker-compose.yml ├── master/ │ ├── my.cnf │ └── init.sql └── slave/ ├── my.cnf └── init.sql ``` ### 主节点(Master)配置 #### my.cnf (master) ```ini [mysqld] server-id=1 log-bin=mysql-bin ``` #### init.sql (master) ```sql CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%'; FLUSH PRIVILEGES; ``` ### 从节点(Slave)配置 #### my.cnf (slave) ```ini [mysqld] server-id=2 ``` #### init.sql (slave) ```sql CHANGE MASTER TO MASTER_HOST='mysql-master', MASTER_USER='replica_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 4; START SLAVE; ``` ### docker-compose.yml 文件内容 以下是一个完整的 `docker-compose.yml` 示例文件[^3]: ```yaml version: '3.8' services: mysql-master: image: mysql:8.0 container_name: mysql-master environment: MYSQL_ROOT_PASSWORD: rootpass volumes: - ./master/my.cnf:/etc/mysql/conf.d/my.cnf - ./master/init.sql:/docker-entrypoint-initdb.d/init.sql ports: - "33061:3306" networks: - mysql-network mysql-slave: image: mysql:8.0 container_name: mysql-slave environment: MYSQL_ROOT_PASSWORD: rootpass volumes: - ./slave/my.cnf:/etc/mysql/conf.d/my.cnf - ./slave/init.sql:/docker-entrypoint-initdb.d/init.sql ports: - "33062:3306" depends_on: - mysql-master networks: - mysql-network networks: mysql-network: driver: bridge ``` ### 启动服务 执行以下命令启动容器: ```bash docker-compose up -d ``` 此命令将启动两个 MySQL 容器:一个作为主节点,另一个作为从节点,并自动完成基础的主从复制配置。 ### 验证复制状态 进入从节点容器并检查复制状态: ```bash docker exec -it mysql-slave mysql -uroot -prootpass -e "SHOW SLAVE STATUS\G" ``` 确保 `Slave_IO_Running` 和 `Slave_SQL_Running` 都为 `Yes`,表示复制正常运行。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值