环境说明
主节点 192.168.80.15从节点 192.168.80.20前提条件: 主从节点已经安装完 MySQL5.7.25程序。MySQL主备集群特点: 读写分离,主节点负责写入,从节点负责读取。
一、主节点配置
1、vi /etc/my.cnf 在mysqld标签下添加如下字段
注意:主库必须开启log_bin!#主从节点设置的id需要是不同的即可server-id=15log_bin=master-binlog_bin-index=master-bin.indexexpire-logs-days=7 #只保留7天的二进制日志,以防磁盘被日志占满保存退出。#重启MySQLsystemctl restart mysqld
#重启后查看是否开启log_bin,log_bin 的值为ON 表示开启。show variables like '%log_bin%';
二、从节点配置
1、 vi /etc/my.cnf 在mysqld标签下添加如下字段
server_id=20relay-log-index=slave-relay-bin.indexrelay-log=slave-relay-binexpire-logs-days=7保存退出。#重启MySQLsystemctl restart mysqld
三、主从同步配置
A.主节点操作
1、进入主节点数据库命令窗口创建用户【主节点】
mysql -uroot -pRoot@123grant replication slave on *.* to 'backup'@'%' identified by 'Bak@1234';创建一个名字为backup的用户,密码是Bak@1234重要说明:replication即可满足同步需求,如果不行,可以给all权限。
2、查看数据库账号【主节点】
select user,authentication_string,host from mysql.user;
3、查看主服务器上当前的二进制日志名和偏移量值【记录日志文件名和偏移量值】【主节点】
B.从节点操作
1、关闭slave【从节点】
2、配置slave【需要使用主节点记录的二进制日志文件名称和偏移量的值】【从节点】
change master to master_host='192.168.80.15',master_user='backup',master_password='Bak@1234',master_log_file='master-bin.000002',master_log_pos=555;
3、开启slave【从节点】
特别说明:slave 复制会随着MySQL服务启动而启动,无需单独启动 slave。【前提条件:my.cnf/my.ini配置文件已经配置完成】
4、查看同步状态【从节点】
show slave status \G如果以下两个参数的值都为Yes,表示同步配置成功。Slave_IO_Running: YesSlave_SQL_Running: Yes
5、从节点配置为只读模式【关键步骤,从节点】
特别说明:如果用户具有super超级权限,还需要设置 super_read_only 参数为: 1 。
注意:通过 set 方式设置的变量,重启MySQL服务后将不再生效,如果想要变量配置永久生效,需要在MySQL的配置文件中修改【my.cnf/my.ini】。
参数永久生效配置如下:
1.找到你的 MySQL 配置文件,通常是 my.cnf(在 Unix 或 Linux 系统中)或 my.ini(在 Windows 系统中)。2.编辑该配置文件,找到 [mysqld] 部分。3.在 [mysqld] 部分下添加如下内容。read_only=1super_read_only=1保存退出4.重启MySQL服务。systemctl restart mysqld
原因:由于集群模式下,要实现读写分离,写的功能在mysql主服务器上,从服务器集群允许只读模式,避免由于操作失误导致的同步问题,我们需要提前设置mysql从服务器的读写为readonly。
#查看读写模式mysql -uroot -pRoot@123show global variables like "%read_only%";
由图可知,只读模式已经关闭。需要打开只读模式。
#开启从节点只读模式readonly,注意:因为 testslave 用户拥有超级权限,因此需要设置 super_read_only 参数!mysql -uroot -pRoot@123set global read_only=1;set global super_read_only=1;#再次查看读写模式show global variables like "%read_only%";
四、同步测试
A.主节点操作
1、主节点创建数据库和用户
#登录MySQL,root用户密码:Root@123mysql -uroot -pRoot@123#查看已经存在的数据库show databases;#创建数据库testdbcreate database if not exists slavedb default character set utf8 collate utf8_bin;#再次查看数据库show databases;#创建用户并授权create user 'testslave'@'%' identified with mysql_native_password by 'Slave@123';grant all privileges on *.* to 'testslave'@'%' with grant option;flush privileges;select user,host from mysql.user;
2、主节点创建表并插入数据
mysql -utestslave -pSlave@123 -Ashow databases;use slavedb;#建表create table testslave(id int,company_name varchar(50),phonenumber int,address varchar(100),cardid varchar(30),mail varchar(50),ipaddr varchar(50),macaddr varchar(50),chepai varchar(50),bankcardid varchar(50));#向表添加字段alter table testslave add column username varchar(50);#修改表的字段类型及长度alter table testslave modify column phonenumber varchar(50);#插入测试数据【默认自动提交】insert into testslave values(1,'腾讯科技有限公司',13121606109,'四川省成都市武侯区大悦路100号','513701199211094555','13121606109@163.com','192.168.80.100','AF-1F-72-72-45-60','川A55555','6236682000000082460','张三');insert into testslave values(2,'百度科技有限公司',13121606109,'四川省成都市武侯区大悦路108号','513701199211094555','13121606109@163.com','192.168.80.100','AF-1F-72-72-45-60','川A55555','6236682000000082460','李四');
#查询表中数据select * from testslave;
B.从节点操作
1、从节点查看数据库
#root用户登录数据mysql -uroot -pRoot@123#查看数据库show databases
结论:数据库已经同步。
2、从节点查看用户信息
#root用户登录数据mysql -uroot -pRoot@123#查看用户信息select user,authentication_string,host from mysql.user;
结论:用户已经同步。
3、从节点登录并查询数据
#直接使用testslave用户登录 slavedb库mysql -utestslave -pSlave@123 slavedb -A#查询testslave表中的数据select * from testslave;
结论:表和表中数据已经同步。
4、验证从节点只读
#登录数据库mysql -utestslave -pSlave@123 slavedb -A#插入数据insert into testslave values(3,'阿里科技有限公司',13121606109,'四川省成都市武侯区大悦路108号','513701199211094555','13121606109@163.com','192.168.80.100','AF-1F-72-72-45-60','川A55555','6236682000000082460','李四');
ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement
结论:从库已经为只读模式。