文章目录

  • 一、概述
  • 1.1原因
  • 1.2 方法
  • 1.3 主从复制的工作原理及过程
  • 二、主从复制配置
  • 2.1 三台服务器进行MySQL的编译安装
  • 2.2 建立时间同步环境
  • 2.3 在从服务器上配置NTP同步
  • 2.4 登录Master主服务器进行配置
  • 2.5 登录Salve从服务器的配置 (20.0.0.24)
  • 2.6 验证主从复制效果


一、概述

1.1原因

在企业网站中,后端 MySQL 数据库只有一台时,会有以下问题:

  • 单点故障,服务不可用
  • 无法处理大量的并发数据请求
  • 数据丢失一大灾难

1.2 方法

  • 增加 MySQL 数据库服务器,对数据进行备份,形成主备
  • 确保主备 MySQL 数据库服务器数据是一样的
  • 主服务器宕机了,备份服务器继续工作,数据有保障
  • 通过主从复制的方式来同步数据,再通过读写分离来提升数据的并发负载能力

1.3 主从复制的工作原理及过程

master将数据库的改变写入二进制日志,slave同步这些二进制日志,并根据这些二进制日志进行数据操作。

mysqly允许并发数 mysql并发配置_服务器


复制的过程

  • 在每个事务更新数据完成之前,Master在二进制日志记录这些改变。写入二进制日志完成后,Master通知存储引擎提交事务。
  • Slave将Master的Binary log复制到中继日志,首先Slave开始一个工作线程–I/О线程,I/O线程在Master上开一个普通的连接,然后开始Binlog dump process ,Binlog dump process从Master的二进制日志中读取事件,如果已经跟上Master,它会睡眠并等待Master产生的新事件。1/O线程将这些日志写入中继日志
  • SQL Slave thread(SQL从线程)处理该过程的最后一步,SQL线程从中继日志读取事件,并重放其的事件而更新Slave数据,使其与Master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。

二、主从复制配置

使用三台服务器进行配置,一台作为主数据库服务器(master),另外两台作为从数据库服务器(salve)。

2.1 三台服务器进行MySQL的编译安装

2.2 建立时间同步环境

在主机Master搭建时间同步服务器NTP (20.0.0.23)

[root@localhost mysql]# yum -y install ntp
[root@localhost mysql]# vi /etc/ntp.conf
####在配置文件的最后面添加下面两行####
server 127.127.1.0   '//本地时钟源'
fudge 127.127.1.0 stratum 8   '//设置时间层级为8'

[root@localhost mysql]# systemctl start ntpd
[root@localhost mysql]# systemctl enable ntpd

2.3 在从服务器上配置NTP同步

登录到20.0.0.24
与主服务器进行时间同步

[root@localhost ~]# yum -y install ntpdate
[root@localhost ~]# ntpdate 20.0.0.23
[root@localhost ~]# ntpdate 20.0.0.23
14 Sep 03:45:08 ntpdate[43786]: step time server 20.0.0.23 offset 73504378.577924 sec

设置周期性计划任务(crontab)

[root@localhost ~]# crontab -e
*/2 * * * * /usr/sbin/ntpdate 20.0.0.23 >> /var/log/
ntpdate.log
[root@localhost ~]# systemctl restart crond
[root@localhost ~]# systemctl enable crond

登录到20.0.0.25

[root@localhost ~]# yum -y install ntpdate
[root@localhost ~]# ntpdate 20.0.0.23
[root@localhost ~]# ntpdate 20.0.0.23
14 Sep 03:45:08 ntpdate[43786]: step time server 20.0.0.23 offset 73504378.577924 sec

2.4 登录Master主服务器进行配置

修改MySQL 数据库的配置文件

[root@localhost mysql]#  vi  /etc/my.cnf
##在原来server-id =1 的地方修改成11 后面新增log_bin = master-bin log-slave-updates = ture

server-id  = 11
log_bin = master-bin    '//开启二进制文件'
log-slave-updates = ture  '//开启从服务器同步权限'
systemctl restart mysqld     '//重启数据库'

登录Master 数据库给从服务器授权

[root@localhost mysql]# mysql -u root -p 
mysql> grant replication slave on *.* to 'myslave'@'20.0.0.%' identified by 'abc123'
mysql> flush privileges;
mysql> mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 |      599 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+

2.5 登录Salve从服务器的配置 (20.0.0.24)

修改MySQL的配置文件

vi  /etc/my.cnf
##在原来server-id =1 的地方修改成22 后面新增 relay-log = relay-log-bin  relay-log-index = slave-relay-bin.index
server-id = 22
relay-log = relay-log-bin 
relay-log-index = slave-relay-bin.index   '//定义relay-log的位置和名称'
[root@localhost ~]# systemctl restart mysqld ##重启数据库

登录Salve 数据库配置同步

[root@localhost ~]# mysql -uroot -p
mysql> change master to master_host='20.0.0.23',master_user='myslave',master_password='abc123',master_log_file='master-bin.000001',master_log_pos=599;
mysql> start slave;
mysql> show slave status\G   '//查看状态'

2.6 验证主从复制效果

登录主服务器20.0.0.23

[root@localhost ~]# mysql -uroot -p
mysql> create database peihua;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| peihua             |
| performance_schema |
| sys                |
+--------------------+

登录从服务器20.0.0.24

[root@localhost ~]# mysql -uroot -p
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| peihua             |
| performance_schema |
| sys                |
+--------------------+