mysql主从复制配置

发布时间2022-06-20 19:53:25MySql50人已围观

简介 如何配置mysql主从复制?

mysql主从复制配置


1、准备两台服务器,都安装好同版本的mysql数据库

2、Master主数据库在/etc/my.conf文件配置:(Master主服务执行)

[mysqld]
## 同一局域网内注意要唯一,数字自定义
server-id=100
read-only=0  # 主库是写库
## 开启二进制日志功能,名称可以自定义
log-bin=mysql-bin
# 注意:skip-name-resolve一定要加,不然连接mysql会超级慢
skip-name-resolve
## 退出后重启数据库:systemctl restart mysqld


3、Slave从数据库在/etc/my.conf文件配置:(Slave从服务执行)

[mysqld]
## 同一局域网内注意要唯一,数字自定义
server-id=101
read-only=1  # 从库是读库
## 开启二进制日志功能,名称可以自定义
log-bin=mysql-server-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin

## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
# 注意:skip-name-resolve一定要加,不然连接mysql会超级慢
skip-name-resolve
## 退出后重启数据库:systemctl restart mysqld


4、在master主数据库上运行(Master主服务执行)

## 登录master数据库
    mysql -u用户名 -p

# 授予slave从数据库可以同步master服务
## 注意mysql5.7可以把授权用户直接在一行执行 ##
    grant replication slave,replication client on *.* to 'root'@'slave服务的ip' identified by 'slave服务的密码';
    flush privileges;
## mysql8.0授权和创建用户需要分开执行 ##
    create user 用户名@'slave服务ip' identified by '密码';
    GRANT ALL PRIVILEGES ON *.* TO '用户名'@'slave服务的ip'WITH GRANT OPTION;
    flush privileges;
# 查看mysql现在又哪些用户集对应的ip权限(可以不执行,只是一个查看)
    select user,host from mysql.user;


5、查询master服务的binlog文件名和位置(Master主服务执行)

show master status;
    File:字段为日志文件名
    Position:字段为复制的位置


6、slave进行关联master主服务(Slave从服务执行)

## 登录slave数据库
    mysql -u用户名 -p
    change master to master_host='master主服务ip',master_user='root',master_password='master主服务密码',master_port=3306,master_log_file='master主服务的日志文件名',master_log_pos=master主服务复制的位置;
## 启动slave从服务
    start slave;
## 再查看主从同步状态,\G表示换行查看
    show slave status\G;
## 显示说明:
    Slave_IO_State:与主服务连接的状态
    Master_Host:主服务的ip
    Master_User:主服务的账号
    Master_Port:主服务的端口
    Master_Log_File:主服务的二进制日志文件
    Read_Master_Log_Pos:主服务的复制位置
    Relay_Log_File:复制到中继日志的文件名
    Relay_Log_Pos:复制到中继日志的位置
    Slave_IO_Running:Yes和Slave_SQL_Running:Yes就表示配置成功
## 如果配置不成功,查看Slave_SQL_Running_State报错原因说明
    Slave_IO_Running:Connecting	# 表示连接失败
    Last_IO_Error:# 错误提示信息


7、如果出现错误,按以下操作执行(Slave从服务中执行)

stop slave;	# 停止从服务
set global sql_slave_skip_counter=1;	# 将连接计数归1
start slave;	# 启动从服务
show slave status\G;	# 查看连接状态
## 如果还不行,请重新检查账号、密码、端口、日志文件、复制位置是否正确


8、如果账号密码确认没有错误,Slave_IO_Running:Connecting连接不上,请先用远程连接工具(Navicat)连接master数据库,是否能够连接成功

## 如果远程连接都连接不成功,那么两种可能
## 1.防火墙问题,可以关闭防火墙再试
## 2.在/etc/mysql/my.conf配置文件中添加绑定bind-address=0.0.0.0再试


赞一个! (2)

文章评论