1. 程式人生 > >超詳細搭建Mysql5.5主從復制

超詳細搭建Mysql5.5主從復制

sets mysql安裝 mysqld mysql-bin 實驗 server-id 企業網 分享圖片 ffffff

需求分析

在企業網站中,後端MySQL數據庫只有一臺時,會有以下問題
1.單點故障,服務不可用
2.無法處理大量的並發數據請求
3.數據丟失——大災難

解決思路

增加MySQL數據庫服務器,對數據進行備份,形成主備。確保主備MySQL數據庫服務器數據是一樣的。主服務器宕機了,備份服務器繼續工作,數據有保障

工作原理

技術分享圖片

主服務器要開啟(Binary log)二進制文件,當主服務器發生數據的更新,他就會記錄到二進制日誌文件裏,主服務器著手處理儲備的事。
此時對於從服務器而言開啟兩個線程
1.IO線程專門針對主服務器上的二進制日誌,先去訪問,如有新數據,給予從服務器,從服務器就往Relay log裏面去寫,寫完之後IO不斷向主服務器發問是否有新數據,繼續寫入Relay log中。當所有結束後Binary log和Relay log數據會相同

2.SQL線程首先讀取Relay log,同時對比是否有新數據,讀取之後開始重放。註意在恢復數據中,是二進制文件,裏面記錄了我們的sql語句,相當於數據恢復一樣,重放的時候會把裏面的數據放在從服務器中,同步到從服務器數據庫中
最終實現主從就可以同步了

實驗環境

主機名稱 IP地址 操作系統 主要軟件 網絡連接模式
master 192.168.100.71 CentOS 7.4 x86_64 mysql-5.5.24.tar.gz NAT
slave01 192.168.100.71 CentOS 7.4 x86_64 mysql-5.5.24.tar.gz NAT
slave02 192.168.100.71 CentOS 7.4 x86_64 mysql-5.5.24.tar.gz NAT

搭建步驟

一、準備工作

1、編輯主機名

[root@localhost ~]# hostnamectl set-hostname master
[root@localhost ~]# hostnamectl set-hostname slave01
[root@localhost ~]# hostnamectl set-hostname slave02
[root@localhost ~]# bash

2、三臺主機關閉防火墻及selinux

[root@master ~]# systemctl stop firewalld.service

[root@master ~]# systemctl disable firewalld.service
[root@master ~]# vim /etc/sysconfig/selinux
技術分享圖片

3、重啟服務

[root@master ~]# reboot

二、三臺主機安裝MySql

1、安裝相關依賴、工具包

[root@master ~]# yum -y install ncurses-devel bison libaio-devel cmake

2、創建進程用戶mysql

[root@master ~]# useradd -s /sbin/nologin mysql

3、解壓、配置安裝mysql

[root@master ~]# mkdir -p /usr/local/mysql #創建mysql目錄

[root@master ~]# tar zxvf mysql-5.5.24.tar.gz -C /usr/src
[root@master ~]# cd /usr/src/mysql-5.5.24/

[root@master mysql-5.5.24]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_DATADIR=/home/mysql \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306

解析:

DCMAKE_INSTALL_PREFIX:mysql軟件安裝位置
DDEFAULT_CHARSET:默認字符集
DDEFAULT_COLLATION:默認字符校驗
DWITH_EXTRA_CHARSETS:額外的編碼,請使用ALL來編譯
DWITH_MYISAM_STORAGE_ENGINE:安裝 myisam 存儲引擎
DWITH_INNOBASE_STORAGE_ENGINE:安裝 innodb 存儲引擎
DWITH_MEMORY_STORAGE_ENGINE:安裝 memory 存儲引擎
DWITH_READLINE:支持readline庫,支持一行行讀取數據
DENABLED_LOCAL_INFILE:啟用本地加載數據
DMYSQL_DATADIR:數據目錄
DMYSQL_USER:指定mysql的運行用戶
DMYSQL_TCP_PORT=3306:mysql的端口號默認是3306

[root@master mysql-5.5.24]# make && make install #編譯及編譯安裝

4、修改mysql安裝目錄的所有者,所屬組

[root@master mysql-5.5.24]# chown -R mysql:mysql /usr/local/mysql/

5、創建修改my.cnf配置文件

[root@master mysql-5.5.24]# cp support-files/my-medium.cnf /etc/my.cnf

6、添加系統服務

[root@master mysql-5.5.24]# vim /etc/profile #修改系統環境變量

最後一行添加:

export PATH=$PATH:/usr/local/mysql/bin/

[root@master mysql-5.5.24]# source /etc/profile #重新讀取系統環境變量

[root@master mysql-5.5.24]# cp support-files/mysql.server /etc/init.d/mysqld #添加系統服務
[root@master mysql-5.5.24]# chmod +x /etc/init.d/mysqld #添加執行權限
[root@master mysql-5.5.24]# chkconfig --add mysqld #將mysqld添加為系統服務

7、初始化數據庫

[root@master mysql-5.5.24]# /usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--ldata=/var/lib/mysql \
--basedir=/usr/local/mysql \
--datadir=/home/mysql

解析:

user:指定數據庫管理員
basedir:指定mysql軟件安裝位置
datadir:指定mysql數據安裝位置

[root@master mysql-5.5.24]# vim /etc/init.d/mysqld
#找到basedir、datadir進行賦值
basedir=/usr/local/mysql #約46行數據庫安裝目錄
datadir=/home/mysql #約47行數據存放目錄

8、重新啟動數據庫

[root@master mysql-5.5.24]# systemctl daemon-reload
[root@master mysql-5.5.24]# service mysqld start
[root@master mysql-5.5.24]# netstat -anpt | grep 3306 #查看端口
技術分享圖片

9、訪問Mysql

[root@localhost ~]# mysqladmin -u root password ‘123‘#設置新密碼
[root@localhost ~]# mysql -uroot -p123 #登錄mysql
技術分享圖片

三、搭建NTP服務,建立時間同步

1、三臺主機安裝NTP服務

[root@master ~]# yum -y install ntp

2、Master主機編輯NTP配置文件

[root@master ~]# vim /etc/ntp.conf

末行添加:

server 127.127.100.0 #指定本地服務器,註意這裏設置的IP,我使用的是100網段
fudge 127.127.100.0 stratum 8 #指定層級,設為8級別 不需要跟別人同步,自己與自己同步

[root@master ~]# systemctl restart ntpd.service #重啟服務

3、兩臺從節點設置時間同步

[root@slave01 ~]# yum -y install ntp ntpdate
[root@slave01 ~]# /usr/sbin/ntpdate 192.168.100.71
技術分享圖片

4、引入周期性計劃任務

[root@master ~]# echo ‘/30 * /usr/sbin/ntpdate 192.168.100.71‘ >> /var/spool/cron/root
[root@master ~]# crontab -l
技術分享圖片

四、Master服務器配置

1、修改主配置文件

[root@master ~]# vim /etc/my.cnf

在[mysqld]標簽中編輯以下參數:

[mysqld]
log-bin=master-bin #約49行,將二進制日誌修改為主服務器日誌文件。
server-id = 11 #約57行,修改Mysql服務器id
log-slave-updates=true #添加此行,允許同步,允許客戶機連接同步更新
這裏提醒一下哈,對於其他的日誌可以酌情對其開啟,這裏只是開啟了主服務器日誌文件

2、重啟服務

[root@master ~]# systemctl restart mysqld.service

3、授權從服務器

[root@master ~]# mysql -u root -p
mysql> grant replication slave on *.* to ‘adm‘@‘192.168.100.%‘ identified by ‘123‘; #授權所有從服務器復制權限,進行二進制的日誌的權限管理

mysql> flush privileges; #更新權限

mysql> show master status;#查看服務器的狀態
技術分享圖片

五、Slave01服務器配置

1、修改主配置文件

[root@slave01 ~]# vim /etc/my.cnf

在[mysqld]標簽中編輯以下參數:

[mysqld]
#log-bin=mysql-bin #將49行二進制日誌文件註釋掉,產生文件,造成浪費
server-id = 22 #約57行,設置服務器id,這裏註意不要和主服務器IP地址重復
relay-log=relay-log-bin #添加此項,IO線程通過讀取日誌要放入relay-log中
relay-log-index=slave-relay-bin.index #添加此項,索引日誌位置

2、重啟服務

[root@slave01 ~]# systemctl restart mysqld.service

master-bin.000001 | 332

3、配置主從同步

[root@slave01 ~]# mysql -u root -p
mysql> change master to master_host=‘192.168.100.71‘,master_user=‘adm‘,master_password=‘123‘,master_log_file=‘master-bin.000002‘,master_log_pos=332;

修改master指定主服務器主機名、用戶名、密碼、文件、位置:

master_host:#指定主服務器主機名
master_user:#主服務器予權限的用戶
master_password:#主服務器予權限的密碼
master_log_fie:#主服務器二進制文件名稱
master_log_pos:#主服務器二進制文件位置

mysql> start slave; #啟動從服務器

mysql> show slave status\G;#查看服務器的狀態
技術分享圖片

六、Slave02服務器配置

1、修改主配置文件

[root@slave02 ~]# vim /etc/my.cnf

在[mysqld]標簽中編輯以下參數:

[mysqld]
#log-bin=mysql-bin #將49行二進制日誌文件註釋掉,產生文件,造成浪費
server-id = 33 #約57行,設置服務器id,這裏註意不要和主服務器、從服務器01IP地址重復
relay-log=relay-log-bin #添加此項,IO線程通過讀取日誌要放入relay-log中
relay-log-index=slave-relay-bin.index #添加此項,索引日誌位置

2、重啟服務

[root@slave02 ~]# systemctl restart mysqld.service

3、配置主從同步

[root@slave02 ~]# mysql -u root -p
mysql> change master to master_host=‘192.168.100.71‘,master_user=‘adm‘,master_password=‘123‘,master_log_file=‘master-bin.000002‘,master_log_pos=332;

mysql> start slave;
mysql> show slave status\G;
技術分享圖片

七、主從復制效果測試

1、主服務器添加數據

[root@master ~]# mysql -u root -p
mysql> create database db_test;
mysql> show databases;
技術分享圖片

2、查看slave01服務器

[root@slave01 ~]# mysql -u root -p123 -e "show databases;"
技術分享圖片

3、查看slave02服務器

[root@slave02 ~]# mysql -u root -p123 -e "show databases;"
技術分享圖片

超詳細搭建Mysql5.5主從復制