在企业网站中,后端 MySQL 数据库只有一台时,会有以下问题:
单点故障,服务不可用无法处理大量的并发数据请求数据丢失一大灾难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)。
在主机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登录到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修改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 | | | | +-------------------+----------+--------------+------------------+-------------------+修改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 '//查看状态'登录主服务器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 | +--------------------+