centos7 mysql主备模式(读写分离)
mysql主备模式:
服务器A:192.168.100.71(主),简称71
服务器B:192.168.100.72(备),简称72
1、两台服务器均安装mariadb(或者mysql),本次是通过yum安装mariadb。
执行命令:yum install mariadb mariadb mariadb-server -y
2、在71服务器上/etc/my.cnf添加内容如下:
[mysqld]
.........
server-id=1
log-bin=master-bin
log_bin_index =master-bin.index
binlog_do_db=database001 ##database001 是要同步的数据库的名称,后面验证数据同步时,就是同步该库的数据
binlog_ignore_db=mysql
user=mysql
3、在72服务器上/etc/my.cnf添加内容如下:
4、分别在主库71和备库72上,启动mysql
执行命令:
systemctl stop firewalld #关闭防火墙(若服务器必须开启防火墙,可通过iptables设置相应规则,开放端口)
systemctl start mariadb #启动mysql
4、在主库71上,登录mysql、创建同步数据的用户,并赋予用户进行replication slave到备库72的权限
执行命令:
mysql -uroot -p #默认无密码,直接回车即可
create user 'sync'@'192.168.100.72' identified by '123456'; #创建用户sync,设置密码123456,并允许备库192.168.100.72登录
flush privileges; #刷新权限
grant replication slave on *.* to 'sync'@'192.168.100.72' identified by '123456' with grant option; #赋予用户sync进行replication slave到备库72的权限
5、在主库71上,查询master状态,并记录File、Position的值,后面会用到。
执行命令:
show master status;
6、在备库72上,登录mysql,并设置主库的相关信息,并启动slave
执行命令:
mysql -uroot -p #默认无密码,直接回车即可
change master to master_host='192.168.100.71', master_port=3306, master_user='sync', master_password='123456', master_log_file='master-bin.000003', master_log_pos=1346;
说明:
master_host、master_port、master_password #主库ip地址、端口、密码
master_log_file #主库File,即步骤5中show master status中File的值
master_log_pos #主库Position,即步骤5中show master status中Position的值
start slave; #启动备库
flush privileges; #刷新权限
7、在备库72上,登录mysql,查询slave状态
执行命令:show slave status\G;
Slave_IO_Running和Slave_SQL_Running的状态应该均为Yes。若字段Last_SQL_Error出现Error,可通过以下方式解决:
执行命令:
slave stop;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
slave start;
8、分别登录主库71、备库72,修改root用户的密码为123456,并开放远程客户端登录数据库的权限(主库、备库上均进行以下操作)
执行命令:
use mysql; #使用mysql库
update user set password=password("123456") where user="root"; #修改root用户的密码为123456
grant all privileges on *.* to 'root'@'%' identified by '123456'; #设置所有ip能通过root 123456登录
9、通过远程工具,如navicat,分别连接到主库71、备库72上
10、在主库71上,进行创建数据库database001(database001和步骤2中配置文件my.cnf保持一致)、表test01等操作,在备库72上查看数据是否同步更新。
CREATE DATABASE `database001` CHARACTER SET utf8 COLLATE utf8_general_ci;
use database001 ;
CREATE TABLE IF NOT EXISTS `test01` (
`id` varchar(64) NOT NULL,
`object` varchar(128) DEFAULT NULL COMMENT '操作对象',
`action` varchar(128) DEFAULT NULL COMMENT '行为',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
备注:业务代码可连接主库71进行数据写入,备库72只做查询操作。