MySQL ---- 主从复制(主从同步)
一:主从复制的作用
在企业网站中,如果后端只要一台 Mysql 服务器时,就会造成故障。比如单点故障,无法处理大量的并发数据请求和造成数据丢失等一系列问题。
1、改造办法
-
增加MySQL 数据库服务器,对数据进行备份,形成主备
-
确保主备mysql 数据库服务器数据是一样的
-
主服务器宕机了,备份服务器继续工作,数据有保障
-
Mysql 主从复制与读写分离是密切相关的
2、更高级解决方案
通过主从复制的方式同步数据,再通过读写分离来提升数据库的并发负载能力 。
二、Mysql 主从复制的类型
- 基于语句的复制(默认)
在主服务器上执行的语句,从服务器执行同样的语句
- 基于行的复制
把改变的内容复制到从服务器
- 混合类型的复制
一旦发现基于语句无法精确复制时,就会采用基于行动的复制
三:实验过程
1、实验环境
2台centos7虚拟机,搭建好mysql服务 。一台主服务器 (master),一台从服务器 (slave)
实验结果验证:在主服务器上执行的命令,从服务器上也会出现。
2、建立时间同步环境
- 在主服务器上安装配置NTP时间同步服务器
(使用yum 安装ntp服务 ,修改ntp.conf ,设置主服务器为时间同步源)
- 在从服务器上进行时间同步
(使用yum 安装ntpdate 并进行时间同步)
3、主服务器上配置 (1)
- 修改主机名 为master
[root@localhost ~]# hostnamectl set-hostname master
[root@localhost ~]#su
[root@master ~]#[root@master ~]# systemctl stop firewalld.service
[root@master ~]# setenforce 0 ‘关闭防火墙’
- 安装时间服务器:
[root@master ~]# yum install ntp -y
- 修改配置文件
[root@master ~]# vim /etc/ntp.conf ‘添加两行命令’
[root@master ~]# systemctl start ntpd ‘开启ntpd’
4、从服务器上配置 (1)
- 修改主机名
[root@localhost ~]# hostnamectl set-hostname slave
[root@localhost ~]#su
[root@master ~]#[root@master ~]# systemctl stop firewalld.service
[root@master ~]# setenforce 0 ‘关闭防火墙’
- 安装时间服务器
[root@slave ~]# yum install ntp ntpdate -y
- 进行时间同步
[root@slave ~]# systemctl start ntpd ‘开启ntpd服务’
[root@slave ~]# /usr/sbin/ntpdate 192.168.34.172 ‘同步主服务器的IP地址’
5、主服务器配置(2)
- 修改配置文件
[root@master ~]# vim /etc/my.cnf
‘插入三行命令’
server-id = 1 ‘指定id号,服务器的唯一标识’
log-bin=master-bin ‘主服务器日志文件’
log-slave-updates=true ‘从服务器更新二进制日志’
- 重启服务
[root@master system]# systemctl restart mysqld.service
- 进入数据库
[root@master system]# mysql -uroot -p
mysql> GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.34.%' IDENTIFIED BY '123'; ‘给从服务器授权访问主服务器’
mysql> flush privileges; ‘刷新’
mysql> show master status; ‘查看主服务器的日志文件’
6、从服务器配置(2)
- 修改配置文件
[root@slave ~]# vim /etc/my.cnf
‘添加3行命令’
server-id = 2 ‘指定id号,服务器的唯一标识’
relay-log=relay-log-bin ‘从服务器上同步日志文件记录到本地’
relay-log-index=slave-relay-bin.index ‘定义relay-log的位置和名称’
[root@slave ~]# systemctl restart mysqld ‘开启mysqld服务’
- 进入数据库,配置同步
[root@slave ~]# mysql -uroot -p
mysql> change master to master_host='192.168.34.172',master_user='myslave',master_password='123',master_log_file='master-bin.000004',master_log_pos=603;
mysql> start slave; ‘开启从服务’
四:实验验证
(1)在主服务器中新建一个数据库,在从服务器上查看 是否有新建的数据库 。有,则主从复制成功。
(2)在 从服务器中查看
Mysql 主从复制与读写分离是密切相关的,下一篇将介绍读写分离。