CentOS7配置mysql主从

CentOS7配置mysql主从

注意事项:

  • 主数据库(master) 和 从数据库(slave) 版本要一致
  • master和 slave的 server_id 在 局域网 内必须唯一
  • 防火墙开放3306端口号【如果有安全组的话也要开放端口才行。】
    #防火墙开放3306端口号
    firewall-cmd --zone=public --add-port=3306/tcp --permanent
    #查看防火墙开放端口列表
    firewall-cmd --zone=public --list-ports
    

主节点(master)配置

#输入命令进入 my.cnf 文件,进行编辑
vi /etc/my.cnf

在这里插入图片描述

######################################## 在 my.cnf 文件里的[mysqld]模块中加入如下配置内容 ##############################################
####主从数据库配置核心部分
#二进制文件名称
log-bin=master-bin
#服务器唯一id,默认为1,值范围为1~2^32−1,主数据库和从数据库的server-id不能重复
server-id=1

####可选配置
# 开启gtid模式
	# GTID保证了每个在主库上提交的事务在集群中有一个唯一的ID;这种方式强化了数据库的主备一致性,故障恢复以及容错能力。
gtid-mode=on     
# 强制gtid一致性,开启后对特定的create table不支持
enforce-gtid-consistency=on    
# 从库binlog记录主库同步的操作日志
log-slave-updates=1     
# 跳过slave复制线程
skip-slave-start=1                         
# 不同步哪些数据库 
binlog-ignore-db = mysql  
binlog-ignore-db = test  
binlog-ignore-db = information_schema  
# 只同步哪些数据库,除此之外,其他不同步,如多个则重复配置 【不要这个的话,主节点创建什么数据库,从节点就会同步创建什么数据库】
binlog-do-db = student   
#二进制日志格式,有 row、statement、mixed 三种格式:
	# row:指的是把改变的内容复制过去,而不是把命令在从服务器上执行一遍。
	# statement:指的是在主服务器上执行的SQL语句,在从服务器上执行同样的语句。
	# mixed:指的是默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。【MySQL默认采用的是这种格式】
binlog-format=ROW
# 为每个session分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
# 配置二进制日志自动删除/过期时间,单位秒,默认值为2592000,即30天;8.0.3版本之前使用expire_logs_days,单位天数,默认值为0,表示不自动删除。
binlog_expire_logs_seconds=2592000
# 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断,默认OFF关闭,可选值有OFF、all、ddl_exist_errors以及错误码列表。8.0.26版本之前使用slave_skip_errors
# 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
replica_skip_errors=1062

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OIl13kFp-1675823972574)(hhh.assets/image-20230208093552641.png)]

配置好了之后需要重启 mysql 服务

#查看mysql服务
systemctl status mysqld
#停止mysql服务
systemctl stop mysqld
#启动mysql服务
systemctl start mysqld
#重启MySQL服务
systemctl restart mysqld

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f7MCNFhe-1675823972574)(hhh.assets/image-20230208095403286.png)]

我们开启了 gtid 模式,查看是否开启成功了【没开启的略过这一步】

#需要先连接上mysql 。
mysql -uroot -p '密码'
#查看gtid是否开启了
show variables like "%GTID%";

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8KKxgDlj-1675823972575)(hhh.assets/image-20230208095736856.png)]

创建用于复制操作的用户

主节点先连接mysql

在主节点创建一个用户,用于从节点链接主节点时使用。注意master是主服务器的用户,而 192.168.85.129 指的是从数据库的服务器IP,意思就是让从服务器有访问的权限

#创建一个同步复制用户(也可以用root用户,但不建议)
	# MySQL创建用户命令解释:CREATE USER 'username'@'host' IDENTIFIED WITH mysql_native_password BY 'password';
		# username:指定创建的用户名
		# host:指定用户登录的主机ip,% 表示任意主机都可远程登录,localhost 表示本地才能登录
		# password:指定该用户的登录密码
CREATE USER 'master'@'192.168.85.129' IDENTIFIED WITH mysql_native_password BY '123456';
#给创建的用户授权同步复制权限
	# MySQL创建授权命令解释:GRANT REPLICATION SLAVE ON database.table TO 'username'@'host';
GRANT REPLICATION SLAVE ON *.* TO 'master'@'192.168.85.129';
#刷新授权表信息
flush privileges;
#接着执行命令查看并记下binary log二进制日志文件名 File 以及位置 Position的值,需要在从数据库用到
SHOW MASTER STATUS;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hhv8DaLp-1675823972575)(hhh.assets/image-20230208100057442.png)]

在创建用户的时候如果密码过于简单可能会出现一个密码不符合当前策略要求【要求是:密码长度大于8,密码中要有小写字符大写字符以及数字和特殊字符组合】

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-esTEgOVR-1675823972576)(hhh.assets/image-20230208092800339.png)]

如果想要简单的密码,就需要改下密码策略

# 指定密码的强度验证等级
set global validate_password.policy=LOW;
# 密码长度要超过6位数
set global validate_password.length=6;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oKbEizfR-1675823972576)(hhh.assets/image-20230208093124482.png)]

从节点(slave)配置

#输入命令进入 my.cnf 文件,进行编辑
vi /etc/my.cnf

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cLA33PmF-1675823972577)(hhh.assets/image-20230207173653451.png)]

######################################## 在 my.cnf 文件里的[mysqld]模块中加入如下配置内容 ##############################################
####主从数据库配置核心部分
#二进制文件名称
log-bin=master-bin
#服务器唯一id,默认为1,值范围为1~2^32−1,主数据库和从数据库的server-id不能重复
server-id=2


####可选配置
# 开启gtid模式
	# GTID保证了每个在主库上提交的事务在集群中有一个唯一的ID;这种方式强化了数据库的主备一致性,故障恢复以及容错能力。
gtid-mode=on     
# 强制gtid一致性,开启后对特定的create table不支持
enforce-gtid-consistency=on    
# 从库binlog记录主库同步的操作日志
log-slave-updates=1     
# 跳过slave复制线程
skip-slave-start=1  
# 不同步哪些数据库 
binlog-ignore-db = mysql  
binlog-ignore-db = test  
binlog-ignore-db = information_schema  
# 只同步哪些数据库,除此之外,其他不同步,如多个则重复配置 【不要这个的话,主节点创建什么数据库,从节点就会同步创建什么数据库】
binlog-do-db = student   
#二进制日志格式,有 row、statement、mixed 三种格式:
	# row:指的是把改变的内容复制过去,而不是把命令在从服务器上执行一遍。
	# statement:指的是在主服务器上执行的SQL语句,在从服务器上执行同样的语句。
	# mixed:指的是默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。【MySQL默认采用的是这种格式】
binlog-format=ROW
# 为每个session分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
# 配置二进制日志自动删除/过期时间,单位秒,默认值为2592000,即30天;8.0.3版本之前使用expire_logs_days,单位天数,默认值为0,表示不自动删除。
binlog_expire_logs_seconds=2592000
# 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断,默认OFF关闭,可选值有OFF、all、ddl_exist_errors以及错误码列表。8.0.26版本之前使用slave_skip_errors
# 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
replica_skip_errors=1062

# relay_log配置中继日志,默认采用 主机名-relay-bin 的方式保存日志文件 
relay_log=replicas-mysql-relay-bin  
# log_replica_updates表示slave是否将复制事件写进自己的二进制日志,默认值ON开启;8.0.26版本之前使用log_slave_updates
log_replica_updates=ON
# 防止改变数据(只读操作,除了特殊的线程)
read_only=ON

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vvJ7QdNs-1675823972577)(hhh.assets/image-20230208103211369.png)]

配置好了之后需要重启 mysql 服务

#查看mysql服务
systemctl status mysqld
#停止mysql服务
systemctl stop mysqld
#启动mysql服务
systemctl start mysqld
#重启MySQL服务
systemctl restart mysqld

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tBKMUP6F-1675823972578)(hhh.assets/image-20230208102256269.png)]

我们开启了 gtid 模式,查看是否开启成功了【没开启的略过这一步】

#需要先连接上mysql 。
mysql -uroot -p '密码'
#查看gtid是否开启了
show variables like "%GTID%";

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cgiUUHNq-1675823972578)(hhh.assets/image-20230208095736856.png)]

在从(Slave)节点上设置主节点参数【设置与主数据库的联系】

先在 主节点 查看 主节点 的配置信息

SHOW MASTER STATUS;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-opXFzbe7-1675823972579)(hhh.assets/image-20230208101312091.png)]

连接从节点的 mysql,在从节点上操作下面的命令

CHANGE MASTER TO MASTER_HOST='192.168.85.128',  -- 主服务器IP
MASTER_USER='master',                       -- 主服务器用户
MASTER_PASSWORD='123456',                    -- 主服务器用户密码
MASTER_LOG_FILE='master-bin.000002',                -- 主服务器【主节点通过SHOW MASTER STATUS;查看的File的值】
MASTER_PORT=3306,                            -- 端口号默认3306
MASTER_LOG_POS=157;                         --  位置【主节点通过SHOW MASTER STATUS;查看的Position的值】

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K4TIs2ZX-1675823972579)(hhh.assets/image-20230208101544727.png)]

查看(slave)主从同步状态

show slave status\G;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PfYUnTcm-1675823972579)(hhh.assets/image-20230208101723304.png)]

开启主从同步

#开启同步
start slave;
#停止同步
stop slave

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uZp7mJDy-1675823972580)(hhh.assets/image-20230208101819339.png)]
如果到这里还是没开启成功的话,就需要看下日志了。然后再根据日志的提示修改

#进入 /var/log 目录
cd /var/log 
#查看日志
tail -100 mysqld.log

查看主节点和从节点的 gtid

  • 主节点

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MAcNtu7b-1675823972580)(hhh.assets/image-20230208103341149.png)]

  • 从节点

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y6XwHzDG-1675823972581)(hhh.assets/image-20230208103504282.png)]

到这里 一主一从 就配置成功了,接下来就可以去创建数据库添加数据进去测试了。

【主机 加数据,从机 就会同步主机的数据。从机 加数据,主机 不会同步从机的数据。如果想要从机 加数据,主机 也同步从机的数据。那么就需要弄成双主,而不是一主一从。 双主只需要在从机重复下主机的操作,主机重复从机的操作即可】 【一主多从,在主机那里添加多几个账号。从机操作跟上面一样即可】

从服务宕机了,重启开启主从复制,还是会同步数据的【从机 ,停止主从 stop slave 开启主从 start slave】

猜你喜欢

转载自blog.csdn.net/qq_45316925/article/details/128931408