1. Mysql主从复制介绍
MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的二进制日志功能。就是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制然后再解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致。MySQL主从复制是MySQL数据库自带功能,无需借助第三方工具。
二进制日志:
二进制日志(BINLOG)记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,但是不包括数据查询语句。此日志对于灾难时的数据恢复起着极其重要的作用,MySQL的主从复制, 就是通过该binlog实现的。默认MySQL是未开启该日志的。
Mysql主从复制分成三步
1.1 master将改变记录到二进制日志(binary log)
1.2 slave将master的binary log拷贝到它的中继日志(relay log)
1.3 slave重做中继日志中的事件,将改变应用到自己的数据库中
2. 主从配置关键配置代码
2.1 修改Mysql数据库的配置文件/etc/my.cnf
1 | [mysqld] |
2.2 重启Mysql服务
systemctl restart mysqld
2.3 登录Mysql数据库,新建从库用户及授权—重要配置!关键配置!
1 | GRANT REPLICATION SLAVE ON *.* to 'xxx'@'%' identified by 'Root@123456'; |
2.4 登录Mysql数据库,执行下面SQL,记录下结果中File和Position的值
1 | show master status; |
2.5 配置-从库Slave
1 | 修改Mysql数据库的配置文件/etc/my.cnf |
2.6 重启从库Mysql服务
systemctl restart mysqld
2.7 登录从库,执行下面连接主库SQL语句—重要配置!关键配置!
1 | #下面是关键配置,是一行执行 |
MySQL命令行技巧:
\G : 在MySQL的sql语句后加上\G,表示将查询结果进行按列打印,可以使每个字段打印到单独的行。即将查到的结构旋转90度变成纵向;
虚拟机克隆导致配置问题
如果是通过克隆虚拟机方式创造第二台虚拟机,那么它们的server_uuid 是同一个,这是mysql在启动的时候自动生成的一个身份id。
- 查询 auto.cnf 文件的所在位置
1
find / -name 'auto.cnf'
- 查看该文件的内容 【下面的地址是通过上面的命令查询出来的。大家的地址可能不同。】
1
cat /var/lib/mysql/auto.cnf
- 把这个文件改名,然后重启mysql即可,mysql会重新生成这个文件以及uuid值
1
2mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf.bak | rm –rf /var/lib/mysql/auto.cnf
systemctl restart mysqld
3. ShardingJDBC实现读写分离步骤
Sharding-JDBC定位为轻量级Java框架,在Java的JDBC层提供的额外服务。 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。
使用Sharding-JDBC可以在程序中轻松的实现数据库读写分离。
- 导入maven坐标
- 在配置文件中配置读写分离规则
- 在配置文件中配置允许bean定义覆盖配置项
3.1 项目添加ShardingJDBC起步依赖
1 | <!--shardingJDBC起步依赖--> |
3.2 配置ShardingJDBC数据源 管理多个数据库 实现读写分离,配置application.yml
1 | spring: |
3.3 开启Spring设置 允许自定义的bean覆盖SpringBoot自动配置提供的bean对象
1 | # 允许程序自定义的bean对象覆盖SpringBoot自动配置的bean对象 |