问题导入
- 在之前项目的基础功能实现中,后台管理和移动端在进行数据访问的时候,都是直接操作数据库MySQL。此时的系统有且仅有一台MySQL服务器,则可能会出现如下问题
- ①、读和写所有压力都由一台数据库承担,压力大
- ②、数据库服务器磁盘损坏导致数据丢失,单点故障
- 解决方案
- 很简单,一台服务器撑不住,那就多台服务器
- 为了解决上述提到的两个问题,我们可以准备两台MySQL,一台主(Master)服务器,一台从(Slave)服务器,主库的数据变更(写、更新、删除这些操作),需要同步到从库中(主从复制)。而用户在访问我们项目时,如果是写操作(insert、update、delete),则直接操作主库;如果是读(select)操作,则直接操作从库(在这种读写分离的结构中,从库是可以有多个的),这种结构我们称为读写分离 。
PS:MySQL主从复制是MySQL数据库自带功能,无需借助第三方工具
二进制日志
- 二进制日志(binlog)记录了所有的DDL(数据定义语言)语句和DML(数据操纵语言)语句,但是不包括数据查询语句。此日志对于灾难时的数据恢复有着极其重要的作用,MySQL的主从复制,就是通过binlog实现。默认MySQL是未开启该日志的
Step1:
准备两台服务器(没条件可以使用虚拟机),并且在服务器中安装MySQL,服务器的信息如下所示
数据库 | IP地址 | 数据库版本 |
---|---|---|
Master(主库) | 192.168.222.135 | 5.7.25 |
Slave(从库) | 192.168.222.140 | 5.7.25 |
PS:虚拟机克隆结束之后,还需要更改克隆机子的IP地址
①、cd /etc/sysconfig/network-scripts ②、vim ifcfg-ens33 ③、修改IPADDR字段的值为为另一个自己网关的ip地址
Step2
开放3306端口,或者关闭防火墙
方式一:开放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent // 永久开放3306端口
firewall-cmd --zone=public --list-ports // 查看端口是否开放
方式二:关闭防火墙
system stop firewalld // 关闭防火墙
system disable firewalld // 关闭开机自动启动
Step3
systemctl start mysqld
Step1:修改MySQL数据库的配置文件/etc/my.cnf
log-bin=mysql-bin #启用二进制日志
server-id=200 #设置服务器的唯一id
上述配置需要配置在mysqld下
Step2:重启MySQL服务
systemctl restart mysqld
Step3:创建数据同步的用户并授权
前置工作:查看数据库的密码复杂程度
登录MySQL,并执行如下指令,创建用户并授权
GRANT REPLICATION SLAVE ON *.* to 'coolman'@'%' identified by 'Root@root';
这句SQL的作用是创建一个用户coolman
,密码为Root@root
,并且给该用户授予REPLICATION SLAVE
权限。常用于建立复制时候所需要用到的用户权限,也就是slave必须被master授权具有该权限的用户,才能通过该用户复制。
Step4:登录MySQL数据库,查看master同步状态
File
和Position
的值show master status;
Step1:修改MySQL数据库的配置文件/etc/mycnf
server-id=201 #服务器唯一id
server_uuid
是一样的,需要修改,否则会引起冲突
vim /var/lib/mysql/auto.cnf
(随意修改后面的字符串即可)Step2:重启MySQL服务
systemctl restart mysqld
:重启服务stop slave;
:登录数据库后,停止从库的服务Step3:登录MySQL数据库,设置主库的地址以及同步位置
change master to master_host='192.168.222.135', master_user='coolman', master_password='Root@123', master_log_file='mysql-bin.000001', master_log_pos=440;
start slave; # 开启从库服务
参数说明:
参数名称 | 含义 |
---|---|
master_host | 主库的IP地址 |
master_user | 访问主库进行主从复制的用户名(在主库中创建的用户) |
master_password | 访问主库进行主从复制的用户对应的密码 |
master_log_file | 指定从哪个日志文件开始同步(上述查询的master状态中的file和position) |
master_log_pos | 指定从日志文件的哪个位置开始同步 |
Step4:查看从数据库的状态
show slave status G;
G
表示将查询结果进行按列打印,可以使每个字段打印到单独的行(即将查到的结构旋转90度变成纵向)参与评论
手机查看
返回顶部