文章目录
- 一、概述
- 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同步这些二进制日志,并根据这些二进制日志进行数据操作。
复制的过程
- 在每个事务更新数据完成之前,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 |
+--------------------+