基於SSL的mysql服務器的主從架構實現mysql
說明:本文選用172.16.22.1做爲主服務器,172.16.22.3做爲從服務器
從服務器的mysql軟件版本應大於或等於主服務器的mysql軟件版本
主服務器與從服務器的server-id 應不一樣
1、準備條件:安裝mysql(本文選用相似於一種綠色軟件的方式安裝mysql,特色:方便、快捷)
1.在172.16.22.1主機上安裝mysql-5.5.20
(1).準備數據存放的文件系統
新建一個邏輯卷,並將其掛載至特定目錄。
增長一個sda5,id爲8e,先不要格式化。測試
- # partprobe /dev/sda
- # pvcreate /dev/sda5
- # vgcreate myvg /dev/sda5
- # lvcreate -L 2G -n mysql myvg
- # mke2fs -j /dev/myvg/mysql
- # mkdir /mydata/data -pv
- # mount /dev/myvg/mysql /mydata
這裏假設其邏輯卷的掛載目錄爲/mydata,然後須要建立/mydata/data目錄作爲mysql數據的存放目錄。
(2).新建用戶以安全方式運行進程:
- # groupadd -r mysql
- # useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql
- # chown -R mysql:mysql /mydata/data
(3).安裝並初始化mysql-5.5.20
- # tar xf mysql-5.5.20-linux2.6-i686.tar.gz -C /usr/local
- # cd /usr/local/
- # ln -sv mysql-5.5.20-linux2.6-i686 mysql
- # cd mysql
- # chown -R mysql:mysql .
- # scripts/mysql_install_db --user=mysql --datadir=/mydata/data
- # chown -R root .
(4).爲mysql提供主配置文件:
# cd /usr/local/mysql
# cp support-files/my-large.cnf /etc/my.cnf
並修改此文件中thread_concurrency的值爲你的CPU個數乘以2(因爲只有一顆CPU,因此這裏thread_concurrency = 2),另外還須要添加以下行指定mysql數據文件的存放位置:
thread_concurrency = 2
datadir = /mydata/data
(5).爲mysql提供sysv服務腳本,並添加mysqld至服務列表,然後啓動服務測試。
- # cd /usr/local/mysql
- # cp support-files/mysql.server /etc/rc.d/init.d/mysqld
- # chkconfig --add mysqld
- # chkconfig mysqld on
- # service mysqld restart
爲了使用mysql的安裝符合系統使用規範,並將其開發組件導出給系統使用,這裏還須要進行以下步驟:
(6).輸出mysql的man手冊至man命令的查找路徑:
編輯/etc/man.config,添加以下行便可:
MANPATH /usr/local/mysql/man
(7).輸出mysql的頭文件至系統頭文件路徑/usr/include:
這能夠經過簡單的建立連接實現:
# ln -sv /usr/local/mysql/include /usr/include/mysql
(8)輸出mysql的庫文件給系統庫查找路徑, 然後讓系統從新載入系統庫:
# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
# ldconfig -v
(9).修改PATH環境變量(直接在/etc/profile文件裏添加「PATH=$PATH:/usr/local/mysql/bin」便可),讓系統能夠直接使用mysql的相關命令:
- # vim /etc/profile
- PATH=$PATH:/usr/local/mysql/bin
- # source /etc/profile
2.在172.16.22.3主機上安裝mysql-5.5.22
(1) .新建用戶以安全方式運行進程:
- # groupadd -r mysql
- # useradd -g mysql -r -s /sbin/nologin -M mysql
(2).安裝並初始化mysql-5.5.22
- # tar xvf mysql-5.5.22-linux2.6-i686.tar.gz -C /usr/local
- # cd /usr/local/
- # ln -sv mysql-5.5.22-linux2.6-i686 mysql
- # cd mysql
- # chown -R mysql:mysql .
- # scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data
- # chown -R root .
(3).爲mysql提供主配置文件:
# cd /usr/local/mysql
# cp support-files/my-large.cnf /etc/my.cnf
並修改此文件中thread_concurrency的值爲你的CPU個數乘以2(因爲只有一顆CPU,因此這裏thread_concurrency = 2),另外還須要添加以下行指定mysql數據文件的存放位置:
thread_concurrency = 2
datadir = /usr/local/mysql/data
(4).爲mysql提供sysv服務腳本,並添加mysqld至服務列表,然後啓動服務測試。
- # cd /usr/local/mysql
- # cp support-files/mysql.server /etc/rc.d/init.d/mysqld
- # chkconfig --add mysqld
- # chkconfig mysqld on
- # service mysqld restart
爲了使用mysql的安裝符合系統使用規範,並將其開發組件導出給系統使用,這裏還須要進行以下步驟:
(5).輸出mysql的man手冊至man命令的查找路徑:
編輯/etc/man.config,添加以下行便可:
MANPATH /usr/local/mysql/man
(6).輸出mysql的頭文件至系統頭文件路徑/usr/include:
這能夠經過簡單的建立連接實現:
# ln -sv /usr/local/mysql/include /usr/include/mysql
(7)輸出mysql的庫文件給系統庫查找路徑, 然後讓系統從新載入系統庫:
# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
# ldconfig -v
(8).修改PATH環境變量(直接在/etc/profile文件裏添加「PATH=$PATH:/usr/local/mysql/bin」便可),讓系統能夠直接使用mysql的相關命令:
- # vim /etc/profile
- PATH=$PATH:/usr/local/mysql/bin
- # source /etc/profile
2、配置主從服務器
1.配置主服務器(172.16.22.1):
(1).爲主服務器生成CA證書以及mysql的證書
# cd /etc/pki/tls
# vim openssl.cnf
[ CA_default ]
dir = ../../CA # Where everything is kept
把上面」=../../CA」改成」=/etc/pki/CA」
- # cd ..
- # cd CA
- # mkdir certs crl newcerts
- # touch index.txt
- # echo 01 > serial
- # echo 01 > crlnumber
- # (umask 077;openssl genrsa 2048 > private/cakey.pem) #生成CA本身的私鑰
- # openssl req –new –x509 –key private/cakey.pem –out cacert.pem –days 3650
依次輸入」CN、Henan、ZZ、M、Tech 、 、 」 這是CA爲本身簽發證書
- # mkdir /usr/local/ssl
- # cd /usr/local/ssl
- # (umask 077;openssl genrsa 1024 > server-key.key) #生成mysql的私鑰
- # openssl rsa –in server-key.key –pubout > server-cert.pem #生成mysql的公鑰
(1).查看/etc/my.cnf配置文件中是否啓動二進制日誌:
log-bin=mysql-bin (默認狀況下都已經開啓,此時不須要作修改)
並在mysql段增長以下三項:
[mysqld]
ssl-ca=/etc/pki/CA/cacert.pem
ssl-cert=/usr/local/ssl/server-cert.pem
ssl-key=/usr/local/ssl/server-key.pem
(2).創建複製權限用戶:
- # mysql
- mysql> CREATE USER 'lh'@'172.16.22.2' IDENTIFIED BY '123456';
- mysql> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'lh'@'172.16.22.2' REQUIRE SSL;
- mysql> SHOW GRANTS FOR lh@’172.16.22.%’;
2.配置從服務器(172.16.22.3):
(1).編輯/etc/my.cnf配置文件,更改server-id使它和主服務器的server-id不同,關閉二進制日誌並打開中繼日誌:
# vim /etc/my.cnf
找到server-id,並改成
server-id = 11
找到 log-bin=mysql-bin 並禁用此項(在前面加上「#」便可)
在「#log-bin=mysql-bin」下面增長兩項:
relay-log = relay-bin
relay-log-index = relay-bin.index
(2).在從服務器上指定主服務器:
- # mysql
- mysql> CHANGE MASTER TO
- -> MASTER_HOST=’172.16.22.1’,
- -> MASTER_USER=’lh’,
- -> MASTER_PASSWORD=’123456’;
- -> MASTER_SSL=1,
- -> MASTER_SSL_CA = 'cacert.pem',
- -> MASTER_SSL_CAPATH = '/etc/pki/CA',
- -> MASTER_SSL_CERT = ‘/usr/local/ssl/server-cert.pem',
- -> MASTER_SSL_KEY = '/usr/local/ssl/server-key.pem';
- mysql> START SLAVE;
- mysql> SHOW SLAVE STATUS\G
說明:因爲基於ssl的mysql主從複製做者本人沒有親身實驗,因此實驗結果未知,如您在實驗以後發現問題,請給予留言提示;如您實驗沒有成功,請給出錯誤截圖;如您實驗成功,請給予實驗結果的正確截圖,謝謝回帖,來到這兒總要留點痕跡吧,O(∩_∩)O哈哈~!