【運維技術】數據庫主從同步搭建

數據庫主從同步搭建

MYSQL主從同步是目前使用比較普遍的數據庫架構,技術比較成熟,配置也不復雜,特別是對於負載比較大的網站,主從同步可以有效緩解數據庫讀寫的壓力。html

MySQL主從同步的機制

MYSQL主從同步是在MySQL主從複製(Master-Slave Replication)基礎上實現的,經過設置在Master MySQL上的binlog(使其處於打開狀態),Slave MySQL上經過一個I/O線程從Master MySQL上讀取binlog,而後傳輸到Slave MySQL的中繼日誌中,而後Slave MySQL的SQL線程從中繼日誌中讀取中繼日誌,而後應用到Slave MySQL的數據庫中。這樣實現了主從數據同步功能。mysql

MySQL主從同步的做用

一、能夠做爲一種備份機制,至關於熱備份
二、能夠用來作讀寫分離,均衡數據庫負載sql

MySQL主從同步的步驟

# 主要步驟:
1. 安裝主數據庫
2. 修改root帳號密碼,root帳號遠程登陸
3. 安裝從數據庫
4. 修改root帳號密碼,root帳號遠程登陸,密碼和主數據庫密碼相同 
5. 主數據庫修改配置,添加server-id,添加bin-log文件
6. 主數據庫建立同步帳號,指定內網ip能夠訪問,設定同步密碼,使用從數據庫鏈接主數據庫測試連通性
7. 主數據庫刷新表,鎖住全部的表,查看master狀態,記錄bin-log文件和當前的定位編號
8. 使用mysqladmin備份數據庫,沒有數據能夠忽略這一步,數據量大的狀況下使用mysqldump來備份數據
9. 從數據庫服務器配置server-id,將備份數據導入從服務器。開啓binlog等配置
10. 從數據庫修改配置,添加同步帳戶信息以及bin-log文件和當前的定位編號
11. 開啓同步,主數據庫接觸鎖定。

實際操做

1. 安裝主數據庫

2. 修改root帳號密碼,root帳號遠程登陸

3. 安裝從數據庫

4. 修改root帳號密碼,root帳號遠程登陸,密碼和主數據庫密碼相同

一、二、三、4:單機安裝mysql教程數據庫

cd /app
mkdir mysql
cd mysql
# 下載mysql的包,可使用服務器下載,也能夠本地下載,上傳到服務器上去
wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.21-1.el7.x86_64.rpm-bundle.tar
tar -xvf mysql-5.7.21-1.el7.x86_64.rpm-bundle.tar
# 查看衝突版本軟件
rpm -qa | grep redhat-lsb-core
rpm -qa | grep postfix
rpm -qa | grep mariadb
# 卸載衝突版本軟件
rpm -ev redhat-lsb-core-4.1-27.el7.centos.1.x86_64
rpm -ev postfix-2.10.1-6.el7.x86_64
rpm -ev mariadb-libs-5.5.56-2.el7.x86_64
# 安裝依賴
yum install -y net-tools
yum install -y libaio
# 安裝rpm,必定要按照順序安裝,遇到問題必定要查詢問題,不可直接繼續安裝
rpm -ivh mysql-community-common-5.7.21-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.21-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.21-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.21-1.el7.x86_64.rpm
# 啓動mysql
systemctl start mysqld
# 查看初始用戶密碼
grep password /var/log/mysqld.log
# 使用mysql帳戶登陸,修改初始化密碼
mysql -p
# 輸入查看的密碼
set password = password("Yingtong@2018!");
# 容許root用戶遠程鏈接
grant all privileges on *.* to root@'%' identified by 'Yingtong@2018!'; 
flush privileges;
# 修改區分大小寫的配置
vim /etc/my.cnf
# 底部加入配置
lower_case_table_names=1
# 從新啓動mysql
systemctl restart mysqld
# 使用客戶端工具鏈接服務器

5. 主數據庫修改配置,添加server-id,添加bin-log文件

# 編輯,並使用:wq保存
vim /etc/my.cnf
# 中止mysql
systemctl stop mysql
# 啓動mysql
systemctl start mysql
# 若是啓動遇到問題可有能夠查看mysql啓動日誌,以及systemctl 啓動日誌
# mysql日誌
tailf /var/log/mysqld.log
# 系統日誌
journalctl -xe

配置:/etc/my.cnf配置修改內容(主數據庫)vim

# 添加serverid,注意必須與從數據庫不相同
server-id=2
# 開啓mysql-bin日誌,使用默認數據目錄:/var/lib/mysql/,使用其餘目錄會有問題
log-bin=/var/lib/mysql/mysql-bin
# 開始mysql-replay-bin日誌,使用默認數據目錄
relay_log = /var/lib/mysql/relay-bin
# 不區分大小寫,項目中有些庫使用大寫區分,因此服務器上添加這個設定
lower_case_table_names=1

6. 主數據庫建立同步帳號,指定內網ip能夠訪問,設定同步密碼,使用從數據庫鏈接主數據庫測試連通性

主數據庫:centos

# 登陸主數據庫服務器,輸入密碼進行登陸
mysql -p
# 建立同步帳號,ip地址爲從數據庫ip地址,密碼自行定義
GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO repl@'172.16.48.131' IDENTIFIED BY 'Repl@2018!';
# 使用戶生效
FLUSH PRIVILEGES;

從數據庫:服務器

# 使用mysql登陸
mysql -urepl -h172.16.48.129 -pRepl@2018!
# 測試鏈接狀況,成功鏈接上,說明建立的同步帳號沒有問題

7. 主數據庫刷新表,鎖住全部的表,查看master狀態,記錄bin-log文件和當前的定位編號

主數據庫;架構

# 鏈接主數據庫
mysql -p
# 鎖定數據庫
flush tables with read lock;
# 查詢主數據庫信息,記錄bin-log文件和座標
show master status;
| File             | Position |
+------------------+----------+
| mysql-bin.000007 |      154

8. 使用mysqladmin備份數據庫,沒有數據能夠忽略這一步,數據量大的狀況下使用mysqldump來備份數據

主數據庫;app

# 建立備份文件夾目錄
mkdir -p /app/mysqlbackup/
# 備份出文件,數據量小的狀況
mysqldump -uroot -p'Yingtong@2018!' -S /var/lib/mysql/mysql.sock --all-databases > /app/mysqlbackup/mysql_bak.$(date +%F).sql
# 備份出文件,數據量大的狀況
mysqldump -uroot -p'Yingtong@2018!' -S /var/lib/mysql/mysql.sock --all-databases | gzip > /app/mysqlbackup/mysql_bak.$(date +%F).sql.gz
# 從數據庫可使用scp命令進行拷貝
scp -r root@172.16.48.129:/app/mysqlbackup/mysql_bak.2018-10-21.sql /app/mysqlbackup/

9. 將備份數據導入從服務器。從數據庫配置修改和添加,server-id,開啓binlog等配置

導入數據庫配置ide

# 將備份數據導入從服務器
mysql -uroot -p'Yingtong@2018!' -S /var/lib/mysql/mysql.sock < /app/mysqlbackup/mysql_bak.2018-10-21.sql
# 修改從服務器數據庫配置
vim /etc/my.cnf
# 從新啓動數據庫
systemctl stop mysqld
systemctl start mysqld

配置:/etc/my.cnf配置修改內容(從數據庫)

# 服務id
server-id=1
# 開啓mysql-binlog日誌
log_bin = /var/lib/mysql/mysql-bin
# 開始mysql-relay日誌
relay_log = /var/lib/mysql/relay-bin
# 設定日誌的格式化
binlog-format = row
# 設定從庫的日誌更新
log-slave-updates = true
# 設定只讀
read_only = 1
# 設定數據庫不區分大小寫
lower_case_table_names = 1

10. 從數據庫修改配置,添加同步帳戶信息以及bin-log文件和當前的定位編號

# 從數據庫登陸mysql
mysql -p
# 設定同步帳號,輸入前面步驟中的mysql的mysql-bin.000007,和座標154
CHANGE MASTER TO
MASTER_HOST='172.16.48.129',
MASTER_USER='repl',
MASTER_PASSWORD='Repl@2018!',
MASTER_LOG_FILE='mysql-bin.000007',
MASTER_LOG_POS=154

# 開啓同步
start slave;
# 查看同步狀態:其中Slave_IO_Running: YES且Slave_SQL_Running: YES即爲成功同步了
show slave status \G

11. 主數據庫接觸鎖定。

# 主數據庫
mysql -p
# 解除鎖定
unlock tables;

12. 其餘操做

# 中止數據庫同步
stop salve;
# 中止同步線程
STOP SLAVE IO_THREAD

參考網站

Mysql主從同步(複製)

相關文章
相關標籤/搜索