MySQL8.0读写分离实战[CentOS7版本]
Posted 小耶哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL8.0读写分离实战[CentOS7版本]相关的知识,希望对你有一定的参考价值。
CentOS7安装mysql8.0读写分离实战
最近一大段时间基本没有分享过原创文章, 技术方面一直在学习新东西, 晚上学习, 白天撸代码, 基本没时间处理这些事情。
接下来一段时间, 将会和大家分享一波关于数据库, mycat, 分库分表等相关知识, 今天可以算是本系列的第一篇吧!
好的, 那就让我们开始吧!
我们应用系统建立的初期,我们的架构都非常的简单,主要满足业务的正常运行,但是随着访问量的升高,人们对系统的可靠性有了更高的要求,所以,我们为了避免单点故障,对系统应用层进行了横向的扩展,这样,保证了系统应用层的高可用,在发生宕机,或者系统升级时,系统对外还是可用的。
而且在访问量升高的时候,系统应用层的压力也会得到分摊,使得每一个单体的系统应用的压力在一个合理的区间范围内。但是,随着访问量的升高,所有的压力都将集中到数据库这一层。
那么数据库这一层,我们要怎么处理呢? 能不能像系统应用层那样进行扩展呢? 答案当然是否定的,我们想象一下,如果数据库层也像系统应用层那样,进行横向扩展;
如图:
环境配置:
CentOS7
MySQL8.0
2个虚拟机 192.168.8.100, 192.168.8.112
MySQL主从配置
主配置log-bin, 指定文件的名字
主配置server-id 默认是1
从配置server-id, 与主不能重复;
数据库规划:
主库: 192.168.8.100
从库: 192.168.8.112
注意: 将db112中的数据库删除, 方便观察同步数据效果
db100配置my.cnf
vim /etc/my.cnf
[mysqld]标签下配置
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
log-bin=xiaoyege_mysql
server-id=1
保存后重启db100 mysql服务器
service mysqld restart
db112配置my.cnf
vim /etc/my.cnf
[mysqld]标签下配置
只需要配置一个server-id=2即可
server-id=2
service mysqld restart
创建主从配置账号&&授权
主数据库创建备份账户并授权replication slave
登录db100
mysql -uroot -p1qaz@WSX;
SELECT DISTINCT User FROM mysql.user;
创建用户
create user 'repl'@'%' IDENTIFIED BY '1qaz@WSX';
授权
GRANT replication slave ON *.* TO 'repl'@'%';
刷新权限
flush privileges;
主库锁表
将主库的表锁住, 锁住以后进行备份, 锁住以后, 写操作就不会落到主表, 然后将主库数据备份到从库, 接着查询一下binlog的位置, 记录一下, 然后在从库中进行主从的配置, 因为主从配置需要指定binlog的位置, 然后把主库的请求放开, 因为可以读取binlog的位置, 锁表之后发生的数据就可以同步从库了;
主库锁表
flush tables with read lock;
在主库插入一条数据进行测试
INSERT user(id,username) VALUES(6,'db_100 主库 xiaoyege');
执行结果:
执行语句一直卡着, 因为锁表了;
主库binlog位置
主数据库查询log-bin的位置
mysql> show master status;
xiaoyege_mysql.000001
此文件就是在主库设置的文件名称;
position = 847;
position之后的数据开始读取日志, 进行数据同步;
在这个位置之前的数据, 需要使用mysql.dump将之前的数据dump下来, 复制到从库当中;
主备份数据
dump数据
需要重新开启一个会话进行操作
mysqldump --all-databases --master-data > dbdump.db
或者:
mysqldump --all-databases --master-data > dbdump.db -uroot -p1qaz@WSX
密码: 1qaz@WSX
文件dump完成
从库dump文件
将dbdump.db文件复制到从库112这台机器上
scp root@192.168.8.111:~/dbdump.db .
xiaoyege1qaz
将这个文件加载到112的mysql当中
mysql < dbdump.db -uroot -p
1qaz@WSX
查看db112, 表里面内容已经存在了; 和之前db100的内容一致;
解除主库锁表
mysql -uroot -p1qaz@WSX;
unlock tables;
查询db100之前的insert语句锁住的情况, 已经执行成功了;
查询从库还是没有同步过来;
从数据库设置主从同步
mysql -uroot -p1qaz@WSX;
mysql>
mysql> change master to
-> master_host='192.168.8.111',
-> master_user='repl',
-> master_password='1qaz@WSX',
-> master_log_file='xiaoyege_mysql.000009',
-> master_log_pos=18259
-> get_master_public_key=1
-> ;
Query OK, 0 rows affected, 8 warnings (0.05 sec)
mysql>
最后执行
start slave;
查看错误信息;
show slave status;
show slave status \G;
错误caching_sha2_password
Last_IO_Error: error connecting to master 'repl@192.168.8.100:3306' - retry-time: 60 retries: 1 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.
查看主库:
SELECT plugin FROM `user` where user = 'repl';
原来是主库repl的plugin是caching_sha2_password 导致连接不上,修改为mysql_native_password即可解决。
ALTER USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY '1qaz@WSX';
刷新权限
flush privileges;
往期经典回顾
微信支付专题
参考资料
1 | MySQL官网
责编 | 小耶哥
本期作者 | 小耶哥
平台建设及技术支持 | 小耶哥
以上是关于MySQL8.0读写分离实战[CentOS7版本]的主要内容,如果未能解决你的问题,请参考以下文章