1. 程式人生 > >在CentOS7中搭建MySQL主從

在CentOS7中搭建MySQL主從

mysql主從 linux centos 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 配置主

技術分享

準備好之後,開始配置主機器

  1. 修改my.cnf配置文件:

vim /etc/my.cnf


增加以下內容:

server-id=130 //定義一個id

log_bin=study1 //定義binlog文件的前綴

技術分享


  1. 修改完配置文件後,重啟mysqld服務:

service mysqld restart


然後可以在/data/mysql 目錄下看到多了這幾個文件:

技術分享

前綴為study1的文件是主從配置的核心文件。


  1. 把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庫:

技術分享



  1. 創建用作同步數據的用戶:

grant replication slave on *.* to ‘repl‘@‘192.168.77.128‘ identified by ‘12345‘;

技術分享


  1. 鎖表,鎖表就是禁止這個別被操作,不讓這個表有任何的改動,這樣一會才能配置從實現同步:

flush tables with read lock;

技術分享


  1. 看一下主的狀態,一會要用到:

show master status;

技術分享


  1. 將除了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即可:

技術分享


  1. 重啟mysqld服務:

service mysqld restart


  1. 把主上tmp目錄下的備份文件都同步到從上,命令如下:

scp 192.168.77.130:/tmp/*.sql /tmp/

技術分享


  1. 登錄到mysql中創建與備份文件相應的庫,我這裏就不逐一去創建了,僅示例其中幾個:

技術分享



  1. 將同步的備份文件恢復到對應的數據庫中:

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庫之外的庫都進行同步,由於是實驗演示,我這裏沒有進行全部備份,因為操作都是一樣的,也不需要過多的演示。


  1. 同步完成後,開始實現主從,這一步需要登錄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中查看到:

技術分享


  1. 接著就是啟動slave:

start slave;

技術分享


8. 啟動後執行以下命令查看是否能夠正常連接主機器:

show slave status\G

技術分享




關於其他的幾個參數:

技術分享



  1. 到主機器上,把剛剛把表解鎖,命令如下:

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主從