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 主從複製與讀寫分離是密切相關的,下一篇將介紹讀寫分離。