需求架構mysql
準備工做算法
主從服務器時間同步sql
# 主從服務器同時配置crontab任務,與NTP服務器同步時間便可 */5 * * * * ntpdate 172.16.0.1 &>/dev/null
部署配置數據庫
主庫配置安全
vi /etc/my.cnf server-id = 1 # 在複製架構中,需保持全局惟一 log-bin = mysql-bin # 默認在數據目錄下 sync_binlog = 1 # 設置mariadb每次在提交事務前會將二進制日誌同步到磁盤,保證服務器崩潰時不會丟失事件 ===== service mysqld start # 啓動mariadb10 ===== mysql -hlocalhost -uroot -p # 登陸mysql MariaDB [mysql]> grant replication slave,replication client on *.* to 'repluser'@'172.16.%.%' identified by 'replpass'; # 建立最小權限的複製帳號 MariaDB [mysql]> flush privileges; MariaDB [mysql]> show master status; # 查看主庫的狀態信息
從庫配置bash
vi /etc/my.cnf server-id = 11 # 在複製架構中,需保持全局惟一 log-bin = mysql-bin # 也可設置爲none,即關閉從庫的二進制日誌 relay-log=/data/relaylogs/relay-bin # 設置中繼日誌文件 log-slave-updates = 1 # 容許從庫將其重放的事件也記錄到自身的二進制日誌中 read_only = 1 # 從庫設置爲只讀 ===== service mysqld start # 啓動mariadb10 ===== mysql -hlocalhost -uroot -p # 登陸mysql MariaDB [mysql]> change master to master_host='172.16.251.123',master_user='repluser',master_password='replpass',master_log_file='mysql-bin.000005',master_log_pos=379; # 鏈接主庫 MariaDB [mysql]> start slave; MariaDB [mysql]> show slave status\G 查看從庫狀態
驗證服務器
# 在主庫上新建數據庫並建立數據 MariaDB [(none)]> create database test_for_replication; MariaDB [(none)]> create table test_for_replication.user(id int not null primary key auto_increment,name char(20) not null,year int not null,classid int not null); MariaDB [(none)]> insert into test_for_replication.user(name,year,classid) values('Jason Kk',23,2),('Hello Kitty',18,1); # 查看從庫可否正常同步數據 MariaDB [(none)]> select * from test_for_replication.user; # 見下圖1 MariaDB [(none)]> show slave status\G # 見下圖2
圖1架構
圖2ide
能夠看出主從同步正常,數據無誤!ui
基於SSL進行安全複製
生成SSL證書及私鑰
主從服務器都須要得到各自的證書,具體步驟詳見「圖解openssl實現私有CA」
主庫和從庫各需的證書文件有:
主庫配置
SSL支持狀態檢查:
若have_ssl的值爲YES,則代表SSL功能已開啓使用;
若have_ssl的值爲NO,則說明SSL功能並未編譯進目前的Mariadb,須要從新編譯程序;
若have_ssl的值爲DISABLED,則表示mariadb編譯時加載了SSL功能,但未啓用,通常以通用二進制程序安裝的Mariadb都是此值;
查看庫文件:
ldd `which mysqld` | grep ssl # 還需查看是否存在libssl.so文件,若不存在,則說明缺乏庫文件 # 麻煩的是若要安裝此缺乏的庫文件,則需安裝libopenssl.1.0.0的程序包,但這個包的安裝依賴於glibc2.14版本,而CentOS6.5系統上原生的是glibc2.12版本的,這下就又涉及glibc的升級了,過於麻煩了,並且也很危險,故放棄之 # 那麼就只能從新編譯安裝mariadb10了,從官網下載最新版的源碼包安裝吧(www.mariadb.com)
Mariadb編譯安裝完成後,就能夠配置基於SSL的安全複製了
chown -R mysql.mysql /etc/master/ssl/ # 注意修改認證相關文件的權限 ===== vi /etc/my.cnf # 在mysqld段下添加以下內容 [mysqld] ssl_ca= /etc/master/ssl/cacert.pem # 配置CA證書 ssl_cert = /etc/master/ssl/master.crt # 配置主庫證書 ssl_key = /etc/master/ssl/master.key # 配置主庫私鑰 ssl_cipher = DHE-RSA-AES256-SHA # 指定支持的加密算法 ===== service mysqld reload # 重載配置 ===== # 再次查看相關變量: MariaDB [(none)]> show variables like '%ssl%' # 見下圖 # 建立複製帳戶: MariaDB [mysql]> grant replication slave,replication client on *.* to 'repluser'@'172.16.%.%' identified by 'replpass' reuire ssl; # 特別明確必須經過SSL才能複製
從庫配置
chown -R mysql.mysql /etc/slave/ssl/ ===== MariaDB [mysql]> change master to master_host='172.16.251.123',master_user='repluser',master_password='replpass',master_log_file='mysql-bin.000010',master_log_pos=776,master_ssl=1,master_ssl_ca='/etc/slave/ssl/cacert.pem',master_ssl_cert='/etc/slave/ssl/slave.crt',master_ssl_key='/etc/slave/ssl/slave.key'; # 在鏈接主庫時直接指定本地從庫的證書文件等信息 MariaDB [mysql]> start slave; MariaDB [mysql]> show slave status\G # 查看從庫狀態
從庫的另外一種配置方法
vi /root/.my.cnf # 在client段下配置從庫證書信息 [client] ssl_ca = /etc/slave/ssl/cacert.pem ssl_cert = /etc/slave/ssl/slave.crt ssl_key = /etc/slave/ssl/slave.key ssl_cipher = DHE-RSA-AES256-SHA ===== MariaDB [mysql]> change master to master_host='172.16.251.123',master_user='repluser',master_password='replpass',master_log_file='mysql-bin.000010',master_log_pos=776,master_ssl=1; # 只需指定master_ssl=1便可
驗證
# 主庫寫入: create test.table t1(name char(20) not null,age int not null); # 從庫讀取; show tables for test; # 驗證結果見下圖