在CentOS7中搭建MySQL主從
筆記內容:
17.1 MySQL主從介紹
17.2 準備工作
17.3 配置主
17.4 配置從
17.5 測試主從同步
筆記日期:2017-11-08
17.1 MySQL主從介紹
Mysql Replication(MySQL主從復制)是MySQL數據庫使用率非常高的一種技術,它使用某個數據庫服務器為主,然後在其他數據庫服務器上進行復制,後面復制的數據庫也稱從數據庫。
MySQL支持單向、異步復制,復制過程中一個服務器充當主服務器,而一個或多個其它服務器充當從服務器。在設置鏈式復制服務器時,從服務器本身也可以充當主服務器,如:a->b->c,b對於a來說是從服務器,但是它又是c的主服務器。
註意:“主從”和“集群”是有區別的,一般剛接觸這些概念的初學者很容易混淆。
簡單來說,對主機器進行寫入操作時會生成一個binlog文件,這個文件記錄了主機器的更改操作,主機器會把binlog通過I/O流線程傳輸到從機器上。然後這個I/O線程會在從機器上生成一個relaylog文件,這個文件裏就是記錄了一些sql語句,接著就會執行relaylog裏的sql語句,這樣就達到了主從的數據同步。
主從一般應用於這兩個場景:第一個是數據備份,然後是作為從庫使用,從庫可以分擔主庫的讀取壓力,但是從庫不可寫。
17.2 準備工作
首先得準備兩臺機器,一臺作為主,一臺作為從:
我這裏是study01作為主機器,study02作為從機器。
這兩臺機器都需要安裝mysql(我這裏只演示其中一臺,因為安裝方法都是一樣的):
因為之前安裝了mysql,所以我得先卸載:
還需要刪除庫文件目錄:
rm -rf /data/mysql/*
卸載完後,下載mysql的二進制包,下載地址:
http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
下載好後解壓
tar -zxfv mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
解壓後將目錄移動到/usr/local/下,並重新命名為mysql:
mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql
進入到mysql目錄下:
cd /usr/local/mysql
如果你的系統沒有/data/目錄需要先創建:
mkdir /data/
如果你的系統沒有myysql用戶也需要先創建:
useradd mysql
執行初始化腳本:
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
如果出現這個錯誤:
就安裝:
yum install -y perl-Module-Install.noarch
如果出現這個錯誤:
然後再安裝:
yum install libaio* -y
拷貝配置文件:
cp support-files/my-default.cnf /etc/my.cnf
vim /etc/my.cnf 配置文件為以下內容:
拷貝啟動腳本:
cp support-files/mysql.server /etc/init.d/mysqld
然後定義basedir和datadir的路徑:
vim /etc/init.d/mysqld 腳本文件為以下內容:
完成以上操作後啟動mysql服務:
/etc/init.d/mysqld start
啟動成功:
查看一下端口是否正常監聽,mysql默認端口為3306:
將mysql加入服務列表裏面去,並設置為開機啟動:
chkconfig --add mysqld
chkconfig mysqld on
然後就可以用service命令去啟動或關閉mysql了
安裝完後的mysql是沒有密碼的,可以使用以下命令無需密碼直接本地登錄:
mysql -uroot -h127.0.0.1
登錄到mysql中使用以下命令設置密碼:
set password=password(‘12345‘);
設置完密碼後重啟mysql,然後就可以使用設置的密碼登錄了:
mysql -uroot -p‘12345‘ -h127.0.0.1
17.3 配置主
準備好之後,開始配置主機器:
修改my.cnf配置文件:
vim /etc/my.cnf
增加以下內容:
server-id=130 //定義一個id
log_bin=study1 //定義binlog文件的前綴
修改完配置文件後,重啟mysqld服務:
service mysqld restart
然後可以在/data/mysql 目錄下看到多了這幾個文件:
前綴為study1的文件是主從配置的核心文件。
把mysql庫備份並恢復成testdata庫,作為測試數據,備份:
mysqldump -uroot -p‘12345‘ mysql > /tmp/mysql.sql
創建一個新的庫:
mysql -uroot -p‘12345‘ -e "create database testdata"
將備份的數據恢復到這個新的庫中:
mysql -uroot -p‘12345‘ testdata < /tmp/mysql.sql
完成以上操作後,現在主從參考的庫就是testdata庫,現在可以看到study1.000001這個文件大小和剛剛那個備份文件的大小幾乎是一致的,所以看得出來這個study1.000001文件裏記錄著的內容就是這個testdata庫:
創建用作同步數據的用戶:
grant replication slave on *.* to ‘repl‘@‘192.168.77.128‘ identified by ‘12345‘;
鎖表,鎖表就是禁止這個別被操作,不讓這個表有任何的改動,這樣一會才能配置從實現同步:
flush tables with read lock;
看一下主的狀態,一會要用到:
show master status;
將除了mysql之外的庫都備份一下:
mysqldump -uroot -p‘12345‘ mysql > /tmp/mysql2.sql
mysqldump -uroot -p‘12345‘ mysql > /tmp/zrlog.sql
mysqldump -uroot -p‘12345‘ mysql > /tmp/test.sql
mysqldump -uroot -p‘12345‘ mysql > /tmp/testdata.sql
mysqldump -uroot -p‘12345‘ mysql > /tmp/performance_schema.sql
17.4 配置從
1. 同樣的從上也要修改my.cnf配置文件:
vim /etc/my.cnf
只不過在主上只需要增加一個server-id即可:
重啟mysqld服務:
service mysqld restart
把主上tmp目錄下的備份文件都同步到從上,命令如下:
scp 192.168.77.130:/tmp/*.sql /tmp/
登錄到mysql中創建與備份文件相應的庫,我這裏就不逐一去創建了,僅示例其中幾個:
將同步的備份文件恢復到對應的數據庫中:
mysql -uroot -h127.0.0.1 -p‘12345‘ zrlog< /tmp/zrlog.sql
mysql -uroot -h127.0.0.1 -p‘12345‘ user< /tmp/user.sql
mysql -uroot -h127.0.0.1 -p‘12345‘ testdata< /tmp/testdata.sql
在實際情況中,需要把所有的除了mysql庫之外的庫都進行同步,由於是實驗演示,我這裏沒有進行全部備份,因為操作都是一樣的,也不需要過多的演示。
同步完成後,開始實現主從,這一步需要登錄mysql:
執行以下兩個命令:
stop slave;
change master to master_host=‘192.168.77.130‘, master_user=‘repl‘, master_password=‘12345‘, master_log_file=‘study1.000001‘, master_log_pos=661506;
解釋一下這命令中的參數:
master_host 定義主機器的ip地址
master_user 定義主機器中給從機器使用的用戶名
master_password 定義用戶的密碼
master_log_file 定義主機器上binlog文件的名稱
master_log_pos 定義主機器上binlog文件的位置
其中master_log_file 和master_log_pos參數中的值可以在主機器上的mysql中查看到:
接著就是啟動slave:
start slave;
8. 啟動後執行以下命令查看是否能夠正常連接主機器:
show slave status\G
關於其他的幾個參數:
到主機器上,把剛剛把表解鎖,命令如下:
unlock tables;
以上步驟都沒有出現問題的話,那麽mysql的主從就搭建完成了。
如果Slave_IO_Running和 Slave_SQL_Running顯示為No或者Connecting的話,主要是由以下幾個原因導致的:
用戶密碼錯誤
POS錯誤(master_log_pos)
網絡不通
防火墻規則
端口沒有放行
ID問題(server-id)
還有就是檢查你執行的change master命令裏的參數指定的值是否有寫錯,出現這種問題後一般首要就是排除這些配置的信息有沒有問題,確定沒有問題後,一般就是系統的問題了,比如設有防火墻規則,或者端口不通等等。
17.5 測試主從同步
上圖介紹的這幾個參數是在change命令上使用的,也就是說當你使用change命令的時候,可以根據需求去使用這些參數來定義相關的配置信息。
以上我們mysql的主從搭建完成了,之後就是測試出從是否能夠正常同步了:
在主機器上查看某個已經同步的表:
在從機器上也查看一下這個表:
可以看到兩個機器上的數據是一致的。接著在主機器上把這個表給清空:
然後再到從機器上去看:
如圖,這個表也是空的,證明數據已經同步了。
在主機器上drop掉這個表:
在從機器上看看是否還能select到這個表:
如圖,這個表已經被刪掉了,所以select就會出錯。
繼續到主機器上drop,這次把整個testdata庫給drop掉:
同樣的到從機器上看看是否還有這個庫:
結果如圖,則測試完成,沒有問題。
提示:從機器的數據庫是不能做任何的修改操作的,因為會導致數據不同步了,如果你小心在從機器上執行了修改的操作,但是數據還是一致的話,那麽關掉slave,再執行change命令即可。 反之,如果數據已經不一致了,只能重新備份搭建主從了。
如果遇到主從不能正常同步,提示uuid相同的錯誤。這是因為克隆機器導致:
https://www.2cto.com/database/201412/364479.html
本文出自 “zero” 博客,請務必保留此出處http://zero01.blog.51cto.com/12831981/1980082
在CentOS7中搭建MySQL主從