Noname
Noname

部署 mysql 主从复制

场景

Linux 主库 192.168.253.100
Windows 从库 192.168.253.200
主库已运行 mysql5,并且有一些数据。从库全新安装 mysql5,版本比主库新,但为同一个主版本。

步骤

主库操作

修改配置

首先要启用主库的二进制日志,才可以进行主从复制
编辑主库的 mysql 配置文件(配置文件可能不在这个位置,取决于 mysql 的安装方式。如果不在这里的话自己用 find 命令搜索出来)
vi /etc/my.cnf
加入以下配置,server-id 可以是任何数,不要跟其他节点重复即可,一般使用 IP 地址最后一段作为 id

[mysqld]
log-bin=mysql-bin
expire_logs_days = 7
server-id=100

之后重启 mysql,使配置生效
systemctl restart mysql

创建复制用户

登录主库,创建用于复制的用户
mysql -uroot -proot

grant replication slave on *.* to 'rep'@'192.168.253.%' identified by '123456';
FLUSH PRIVILEGES;

如果 mysql 版本是8.x则使用以下命令

CREATE USER 'rep'@'192.168.253.%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'rep'@'192.168.253.%';
FLUSH PRIVILEGES;

导出数据

由于主库已经运行一段时间,里面有数据,需要做数据导出

mysqldump -uroot -proot --all-databases --master-data=2 --single-transaction > /root/all_data.sql

将导出的文件传输到从库系统上备用。确保主库的 3306 端口已经在防火墙打开可以被访问,如此主库的准备工作已经完成。

从库操作

修改配置

主库导出的all_data.sql文件已存放在 D 盘根目录。下载 mysql-5.7.44-winx64.zip 解压到D盘根目录,进入D:\mysql-5.7.44-winx64,新建或编辑 my.ini 配置文件
写入以下配置

[client]
port = 3306

[mysqld]
port = 3306
basedir=D:\mysql-5.7.44-winx64
datadir=D:\mysql-5.7.44-winx64\data
max_connections=200
default-storage-engine=INNODB
explicit_defaults_for_timestamp=true

server-id=200
#super_read_only=1
#待导入完数据后,就可以取消上面的注释并重启服务,让从库变为只读
report-host=192.168.253.200

初始化数据库

运行 cmd,进入D:\mysql-5.7.44-winx64\bin目录,执行以下命令初始化数据库并安装为系统服务

mysqld --initialize-insecure
mysqld --install MySQL

去系统服务里找到 MySql 服务,启动服务(启动数据库)。同时将D:\mysql-5.7.44-winx64\bin路径加入到系统 Path 环境变量,以方便我们以后调用 mysql 命令。

导入数据

执行以下命令将主库的数据导入从库

mysql -uroot < D:\all_data.sql

导入成功后,就可以修改配置文件,让从库进入只读模式了

配置主从复制

用文本编辑器打开主库导出的 sql 文件,查看第22行,获取主库备份时刻的二进制日志和 POS 信息。
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=15412321;
登录从库(注意这时候密码已经被覆盖成主库的密码了)
mysql -uroot -proot
设置从库参数,注意根据刚刚获取到的信息,修改MASTER_LOG_FILEMASTER_LOG_POS的值。

CHANGE MASTER TO
MASTER_HOST='192.168.253.100',
MASTER_USER='rep',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000005',
MASTER_LOG_POS=15412321;

启动主从复制

直接在 sql 窗口执行
start slave;
这时候从库就会开始同步主库的数据

查看同步状态

直接在 sql 窗口执行,可查询从库的同步状态
show slave status \G
如果能看到以下几个关键信息,则主从复制正常运行,从库已同步主库数据

Slave_IO_State: Waiting for master to send event
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates

如此主从复制已配置完成,从库可以查询数据,但是不能写入数据。

常见问题

从库输出的信息里
出现 Slave_IO_Running: No,一般是网络问题,检查从库机器能否访问主库机器的 3306 端口,能否正常远程登录数据库
出现 Slave_SQL_Running: No,则要查看从库配置的MASTER_LOG_FILEMASTER_LOG_POS参数是否正确。
Slave_SQL_Running_StateSlave_IO_State 会给出具体的错误原因,参照错误提示进行排查。

其他命令

主库-显示主库参数:

show master status;

主库-显示从库节点信息:

show slave hosts;

从库-停止主从同步

stop slave;

发表回复

textsms
account_circle
email

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理

Noname

部署 mysql 主从复制
场景 Linux 主库 192.168.253.100 Windows 从库 192.168.253.200 主库已运行 mysql5,并且有一些数据。从库全新安装 mysql5,版本比主库新,但为同一个主版本。 步骤 主库操作 修改配…
扫描二维码继续阅读
2024-01-17