mysql5.7 读写分离配置笔记

使用虚拟机vm和ubuntu server 16系统,安装的时候就已经默认安装了lamp环境(mysql5.7),安装完成一个系统后直接关闭虚拟机,复制当前虚拟机然后选择打开虚拟机,这样可以省去很长的系统安装时间,两个系统重新启动,这样会重新分配不同的IP地址

配置远程主机可连接数据库

grant all privileges on *.* to 'myuser'@'%' identified by 'mypassword' with grant option;
flush privileges;

完成之后开始mysql的配置
配置步骤
1. 修改配置文件 my.cnf
master:

[mysqld]
log-bin=MySQL-bin //[必须]启用二进制日志
server-id=222 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
slave:
[mysqld]
log-bin=mysql-bin
server-id=226
2. 重新启动两台服务器的mysql
3. master创建授权用户
登陆主服务器mysql命令行,创建一个用于从服务器复制的用户

GRANT REPLICATION SLAVE ON *.* to '用户名'@'%' identified by '密码';
"*.*"表示对所有库的所有操作,“%”表示所有客户端都可能连,也可用具体客户端IP代替,如192.168.145.226,加强安全
4. 查看master状态
登陆主服务器mysql命令行
show master status;
+-------------------------+----------+
| File | Position |
+-------------------------+----------+
| mysql-bin.000002 | 1308 |
+-------------------------+----------+
mysql-bin.000004 是用于主从复制的文件名
1308 是日志文件内的最新位置
5. slave指向master
登陆从服务器mysql命令行,使用之前创建的用户和master的日志文件及其位置
change master to master_host='master ip',master_user='用户名',master_password='密码',
master_log_file='mysql-bin.000002',master_log_pos=1308; #注意不要断开,“1308”无单引号。
6. 启动slave
start slave;
7. 查看slave状态

show slave status\G;
结果中有两个重要数据项:
常见的问题是SQL线程没有正常工作 Slave_SQL_Running: No
通常是两边的数据库不是完全对应的,需要确保master上的库及到目前为止的最新记录都复制到slave上了
8. 测试
当IO线程和SQL线程都正常后,到master中随意测试下插入、修改、删除操作,同时到slave中检查
1) Slave_IO_Running: Yes 
IO线程状态,必须YES
2) Slave_SQL_Running: Yes 
SQL线程状态,必须YES
在start slave 后发现 Slave_IO_Running=NO
show variables like 'log_error.log'
查找错误日志文件位置,经过查日志后提示master and slave have equal mysqlserver uuid,才想起我的系统是直接复制的,mysql-server 的uuid一样了,

#find / -name auto.cnf
打开随意修改几个字符,注意要保持UUID格式,然后重启mysql完成

Mysql 5.7 主从复制的多线程复制配置方式,数据库复制的主要性能问题就是数据延时,为了优化复制性能,Mysql 5.6 引入了 “多线程复制” 这个新功能,但 5.6 中的每个线程只能处理一个数据库,所以如果只有一个数据库,或者绝大多数写操作都是集中在某一个数据库的,那么这个“多线程复制”就不能充分发挥作用了,Mysql 5.7 对 “多线程复制” 进行了改善,可以按照逻辑时钟的方式来分配线程,大大提高了复制性能,下面看一下在5.7中如何配置 “多线程复制” 
1、对两个mysql 实例配置好主从复制配置成功后,在从库上使用

show processlist;
查看现在的状态
可以看到只有一个复制线程在运行

2、在从库上停止复制
stop slave;
3、设置并发同步类型为逻辑时钟方式,先看下现在 slave 的并发类型,通过变量 slave_parallel_type 的值来获得,这个变量用来决定如何使用多线程复制
show variables like 'slave_parallel_type';
默认是datebase,每个线程只能处理一个数据库
配置成基于逻辑时钟的方式
set global slave_parallel_type='logical_clock';
4、设置复制线程的数量
先看下当前的并发数量,通过变量 slave_parallel_workers 的值来获得,这个变量用来决定并发处理的线程数
show variables like 'slave_parallel_workers';
现在是 0,我们把他改成 4
set global slave_parallel_workers=4;
5、启动复制
start slave;
6、验证配置结果
show processlist;
可以看到已经有4个IO线程了,配置完成

你可能感兴趣的:(MYSQL)