MySQL8.0读写分离实例

共 4054字,需浏览 9分钟

 ·

2023-10-14 22:26

MySQL 8.0读写分离  

系统建立初期,我们的架构都非常的简单,主要满足业务的正常运行,但是随着访问量的升高,人们对系统的可靠性有了更高的要求,所以,我们为了避免单点故障,对系统应用层进行了横向的扩展,这样,保证了系统应用层的高可用,在发生宕机,或者系统升级时,系统对外还是可用的。而且在访问量升高的时候,系统应用层的压力也会得到分摊,使得每一个单体的系统应用的压力在一个合理的区间范围内。


但是,随着访问量的升高,所有的压力都将集中到数据库这一层。 数据库这一层将会成为系统的瓶颈,现在就需要针对数据库这一环节进行扩展,以保证其可靠性,高可用性。


同时,有了上面对应用服务器水平扩展的方案,那么能不能 像系统应用层那样 水平 进行扩展 呢?答案是否定的, 想象一下,如果数据库层也像系统应用层那样,进行横向扩展,如图:


         faeda273b2e5a0887ccde2e4c567ee3c.webp



  • 1.MySQL主从配置  



主配置log-bin,指定文件的名字


l 主配置server-id 默认是1


l 从配置server-id,与主不能重复。


2.数据库规划:  


主库:192.168.8.100


从库:192.168.8.112


注意:将db112中的 数据库删除, 方便观察同步数据效果


2-1 db100配置my.cnf  


vim /etc/my.cnf


[mysqld]标签下配置


da92672aec860c417f48a05fadfc2edf.webp


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


92b115659488a99fcbec5019bb0af71c.webp


2-2 db112配置my.cnf  


vim /etc/my.cnf


[mysqld]标签下配置


只需要配置一个server-id=2即可


2c3a7f6b2d327c72f4b7b60993150b8f.webp


server-id=2


service mysqld restart


3.创建主从配置账号&&授权  


主数据库创建备份账户并授权 replication slave


登录db100 


mysql -uroot -p1qaz@WSX;


SELECT DISTINCT User FROM mysql.user;


创建用户


create user 'repl'@'%' IDENTIFIED BY '1qaz@WSX';


91f0b056d509d341b047e5f237cf129c.webp


授权


GRANT replication slave ON *.* TO 'repl'@'%';


c6aab4b8e89fc330e7b262b3fc2f54d5.webp


刷新权限


flush privileges;


37f88a18402bfe4bc2d11960dedfb514.webp


4.主库锁表  


将主库的表锁住,锁住以后进行备份,锁住以后,写操作就不会落到主表,然后将主库数据备份到从库,接着查询一下binlog的位置,记录一下,然后在从库中进行主从的配置,因为主从配置需要指定binlog的位置


然后把主库的请求放开,因为可以读取binlog的位置,锁表之后发生的数据就可以同步从库了;


主库锁表


flush tables with read lock;


03c3e28656b6d4f5ec95eca96f6ba4c8.webp


在主库插入一条数据进行测试


INSERT user(id,username) VALUES(6,'db_100 主库 xiaoyege');


执行结果:


执行语句一直卡着,因为锁表了;


5b9b78830320ad695d41fbef2b67a2ac.webp


5.主库binlog位置  


主数据库查询log-bin的位置


mysql> show master status;


ab00166dd1b02cf8b036639b8bc3116a.webp


xiaoyege_mysql.000001


此文件就是在主库设置的文件名称;


p osition = 847;


p osition 之后的数据开始读取日志,进行数据同步;


在这个位置之前的数据,需要使用mysql.dump将之前的数据dump下来,复制到从库当中;


主备份数据


dump数据


需要重新开启一个会话进行操作


mysqldump --all-databases --master-data > dbdump.db


91bc067fcb46ef28c850175dcb080a7d.webp


或者:


mysqldump --all-databases --master-data > dbdump.db -uroot -p1qaz@WSX


密码:1qaz@WSX


1f5df3d35ab660d5f4c2bb067e461293.webp


文件dump完成


056b03115f6fd4f89378c3bfb68d21b8.webp


6.从库dump文件  


将dbdump.db文件复制到从库112这台机器上


scp root@192.168.8.111:~/dbdump.db .


xiaoyege1qaz


08a3a53f20e37e035fd3ad5ae850037f.webp


将这个文件加载到112的mysql当中


0586fad26372ae772a9613e88aebeca2.webp


mysql < dbdump.db -uroot -p


1qaz@WSX


查看db112,表里面内容已经存在了; 和之前db100的内容一致;


7.解除主库锁表  


mysql -uroot -p1qaz@WSX;


unlock tables;


8c0ec9d1e33024935ff1dd57d4227b33.webp


查询db100之前的insert语句锁住的情况,已经执行成功了;


eab75ba29a42faf472bcab972dfb1c12.webp


查询从库还是没有同步过来;


8.从数据库设置主从同步  


219ee93d977052e8f0ff7dc1ad7cb417.webp


mysql -uroot -p1qaz@WSX;


mysql>


mysql> change master to


-> master_host='192.168. 8 .1 11 ',


-> master_user='repl',


-> master_password='1qaz@WSX',


-> master_log_file='xiaoyege_mysql.00000 9 ',


-> master_log_pos= 18259


-> get_master_public_key=1


-> ;


Query OK 0 rows affected 8 warnings (0.05 sec)


mysql>


最后执行


start slave;


9ea49079952ed389972246db795edc8d.webp


查看错误信息;


show slave status;


show slave status \G;


9.常见错误  


9-1 错误caching_sha2_password  


c5c4f7a130c301ff4a2b5452e8535796.webp


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';


e333f80752a532ea132215efe40ce1f6.webp


原来是主库repl的plugin是caching_sha2_password导致连接不上,修改为mysql_native_password即可解决。


ALTER USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY '1qaz@WSX';


flush privileges;




近期热文



参考资料


1 | JUC




责编  | 小耶哥


本期作者  | 小耶哥


平台建设及技术支持  | 小耶哥




浏览 50
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报