前言
多台服务器,如:A,B,C三台服务器,A服务器允许读写,B、C服务只允许读操作。这样做的好处就是能减轻mysql服务器的压力。
原理
从库读取主库二进制sql执行文件,实现实时更新从库的数据。当主库insert,update,delete操作的时候,相关的操作都会写入到sql执行文件里面去,从库实时进行复制执行操作。
优势
- 主从复制是实现读写分离的前提条件
- 实现数据库备份,提高数据库的容灾性
- 提高服务器的高可用,既某台服务宕机后,尽量减少损失
- 集群的前提条件
操作
请确保linux服务器已经成功安装mysql。如果没有请移步:
Centos 7 安装 mysql5.7.21
准备工作
- 启动linux的mysql服务命令:service mysqld start
- 关闭linux防火墙:service iptables stop (Linux 7.0+默认使用的是firewall,相关操作语句见文章底部)
主库相关操作
- 配置server_id
- 设置从服务器的读取账号权限
- 同步
- 进入到mysql配置文件中 (linux服务器中mysql的配置文件默认路径在 /etc/my.cnf;在windows环境下,配置文件叫my.ini)
- 新增如下配置
server_id=190(默认是1)#服务器id
log-bin=mysql-bin #开启日志文件
- 配置完成后重启服务,通过mysql工具查看是否生效
#查看服务器的id,图二
SHOW VARIABLES LIKE 'server_id'
#查看主服务器的状态,图三
show master status;
file表示二进制sql文件的名称,position表示当前二进制sql文件的位置
配置从服务器
- 新增配置如下
server_id=191(默认是1)#服务器id
log-bin=mysql-bin #开启日志文件
binlog_do_db=test#主库的数据库名称为test
在主库中为从数据库创建访问sql日志文件的账号及相关配置
# 配置用户名为honva,密码为h123的用户,允许访问所有库的所有表
grant replication slave on *.* to 'honva'@'%' identified by 'h123';
从库添加链接主库的信息配置
==需要把数据库先停止==
stop slave;
#各个字段的含义:master_host主库的ip地址,master_user、master_password主库为从库分配的用户名和密码,master_log_file从库需要复制的sql二进制文件名称,master_log_pos从库需要复制的其实位置
change master to master_host='192.168.10.1',master_user='honva',master_password='h123',master_log_file='mysql-bin.000013',master_log_pos=107;
start slave;
#最后可以在从服务器中查看是否同步成功
show slave status;
Firewalls相关操作语句
systemctl start firewalld # 启动
systemctl status firewalld # 或者 firewall-cmd --state 查看状态
systemctl disable firewalld # 停止
systemctl stop firewalld # 禁用
# 关闭服务的方法
# 你也可以关闭目前还不熟悉的FirewallD防火墙,而使用iptables,命令如下:
systemctl stop firewalld
systemctl disable firewalld
yum install iptables-services
systemctl start iptables
systemctl enable iptables