Mysql的主從複製
Mysql的主從複製,我們一般用來保證數據間的同步關係,比如有分公司,我們就需要把數據同步給千里之外的分公司,這樣就很方便快捷。這個實驗我們還實現了ssl安全連接,這樣在同步的過程起到了安全保護數據的作用
我們這個實驗用的mysql版本是5.7,相比較之前的版本會有一些不同
Mysql5.7 支持原生systemd
Mysql5.7 對於多核CPU、固態硬盤、鎖有着更好的優化 更好的InnoDB存儲引擎 更爲健壯的復制功能
安裝mysql:
我所用的系統環境:centos7.2x86_64,這個版本自帶mariadb-libs,所以要把它卸載:
Rpm -aq | grep mariadb
安裝依賴包:
安裝cmake
【root@localhost ~】# tar zxf cmake-3.5.2.tar.gz
【root@localhost ~】# cd cmake-3.5.2/
【root@localhost cmake-3.5.2】# ./bootstrap
使用 gmake && gmakeinstall 編譯
【root@localhost cmake-3.5.2】# gmake && gmake install
安裝ncurses
【root@localhost ~】# tar zxf ncurses-5.9.tar.gz
【root@localhost ~】# cd ncurses-5.9/
【root@localhost ncurses-5.9】# ./configure && make && make install
安裝bison
【root@localhost ~】# tar zxf bison-3.0.4.tar.gz
【root@localhost ~】# cd bison-3.0.4/
【root@localhost bison-3.0.4】# ./configure && make && make install
安裝boost
【root@localhost ~】# tar zxf boost_1_59_0.tar.gz
【root@localhost ~】#cd boost_1_59_0/
【root@localhost boost_1_59_0】# cd
【root@localhost ~】#mv boost_1_59_0 /usr/local/boost
創建用戶並添加到組
【root@localhost ~】# groupadd -r mysql && useradd -r -g mysql -s /bin/false -M mysql
創建mysql安裝目錄和數據庫目錄
mkdir/usr/local/mysql ---創建目錄
mkdir/usr/local/mysql/data ---數據庫目錄
編譯安裝mysql
我們可以使用make && make install 進行編譯安裝,不過這條命令是隻用單線程,安裝過程過於緩慢,用下面這條命令可以根據CPU核數指定編譯時的線程數,大大提高了安裝的速度
make -j $(grep processor/proc/cpuinfo | wc -l)
-j:根據CPU核數指定編譯時的線程數
在安裝所需模塊的時候難免輸入錯誤,當我們想重新運行cmake配置,需要刪除CMakeCache.txt文件: #makeclean
#rm -f CMakeCache.txt
優化Mysql的執行路徑
設置權限並初始化MySQL系統授權表
#cd /usr/local/mysql
# chown -R mysql:mysql . ---更改所有者,屬組,注意是mysql .
注意:5.7.6之後版本初始系統數據庫腳本(本文使用此方式初始化)
#/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql
--datadir=/usr/local/mysql/data
生成一條mysql的初始密碼(注意保存),後面要用到!
創建配置文件
#cd /usr/local/mysql/support-files ---進入MySQL安裝目錄支持文件目錄
#cp my-default.cnf /etc/my.cnf ---復制模板爲新的配置文件,
修改文件中配置選項,如下圖所示,添加如下配置項
#vi /etc/my.cnf
配置mysql自動啓動
我們開啓mysql服務是會報錯,原因是在mysqld.service,把默認的pid文件指定到了/var/run/mysqld/目錄,而並沒有事先建立該 目錄,因此要手動建立該目錄並把權限賦給mysql用戶;
解決方法有兩個:
一是創建mysqld.service文件裏指定的目錄/var/run/mysqld並給屬主權限:chown -R mysql:mysql/var/run/mysqld
二是修改/usr/lib/system/system/mysqld.service文件裏的指定路徑,寫入一個已存在的路徑
systemctl daemon-reload重新加載
再次啓動mysql服務
連接數據庫 ----密碼是剛開的初始密碼
修改庫管理員用戶root的密碼
實現基於ssl安全連接的主從複製
1)在主mysql創建SSL/RSA文件
#cd /usr/local/mysql/bin ---切換目錄
#mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql
--datadir=/usr/local/mysql/data ---創建新的SSL文件
重啓mysqld服務之前,我們要給server-key.pem權限
chmod +r /usr/local/mysql/data/server-key.pem
然後再重啓服務 #systemctl restart mysqld
重啓mysql服務,這時錯誤日志中就沒有報錯了
登錄mysql,執行mysql>showvariableslike'%ssl%';
從上圖可以看到mysql支持了ssl安全連接
在主mysql上的操作完成,再生成一個復制帳號:REQUIRESSL
進入mysql :
Mysql -u root -p ‘123.abc’
Mysql>grant replication slave on *.* to ‘rep’@’192.168.1.%’identified by require ssl;
在主mysql上啓用二進制日誌並重啓mysql服務
添加下面的配置項
Log-bin=mysql-bin
重啓mysql
Systemctlrestart mysqld
進入mysql
Mysql-u root -p ‘123.abc’
查看master狀態
Showmaster status;
注:要記住上圖所顯示的file和position的值,配置從服務器要用到防火牆允許3306/tcp通信
【root@localhost ~】# firewall-cmd --permanent --add-port=3306/tcp
【root@localhost ~】#firewall-cmd -reload
配置從服務器
##可以克隆主mysql,修改ip即可。
從mysql服務器 的/etc/my.cnf文件內容
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
server_id = 2
socket = /usr/local/mysql/mysql.sock
log-error = /usr/local/mysql/data/mysqld.err
relay-log = /usr/local/mysql/data/relay-log-bin
relay-log-index = /usr/local//mysqldata/slave-relay-bin.index
注:server_id要唯一,不能和其他mysql主機的重複
把主mysql生成的證書給從服務器
在主mysql中的/usr/local/mysql/daata路徑下執行scp;
【root@localhost data】# scp ca.pem client-cert.pemclient-key.pem [email protected]:/usr/local/mysql/data/
注意:192.168.1.150是從mysql的ip,192.168.1.100是主mysql的ip地址。
!!!!!!設置client-key.pem的r權限,要不然無法使用私鑰
重啓mysql服務
Systemctl restrt mysqld
進入數據庫
Mysql-u root -p‘123.abc’
查看SSL是否被支持
Show variables ‘%ssl%’;
要求:have-openssl YES
Have-ssl YES
那麼在配置主從復制之前可以在從mysql上用SSL連接主服務器試試:
cd /usr/local/mysql/data
Mysql --ssl-ca=ca.pem ssl-cert=client-cert.pem ssl-key=client-key.pem -u rep
-p123456 -h 192.168.1.100
進入數據庫後,使用\s查看數據庫詳細信息,會發現是主mysql的ip,ssl測試連接成功
最後開始配置主從replicate,登錄從mysql,在從上mysql上執行:
開啓從mysql服務器
注意:因爲我們的從mysql是克隆的主mysql,所以我們要修改從mysql的uuid
路徑是:/usr/local/mysql/daa/auto.cnf
修改完成之後重啓mysqld服務
Systemctl restart mysqld
登錄從mysql 執行
show slave status\G;
會發現:
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
測試:在主mysql上創建庫和表,在從mysql上會立刻進行同步!!!!