Mysql的高可用方案及主从详细配置
1、常用的高可用MySQL解決方案:
數(shù)據(jù)庫(kù)作為最基礎(chǔ)的數(shù)據(jù)存儲(chǔ)服務(wù)之一,在存儲(chǔ)系統(tǒng)中有著非常重要的地位,因此要求其具備高可用性無(wú)可厚非。能實(shí)現(xiàn)不同SLA(服務(wù)水平協(xié)定)的解決方案有很多種,這些方案可以保證數(shù)據(jù)?庫(kù)服務(wù)器在硬件或軟件出現(xiàn)故障時(shí)服務(wù)繼續(xù)可用。
高可用需要解決的主要問(wèn)題有兩個(gè),一是如何實(shí)現(xiàn)數(shù)據(jù)共享或同步數(shù)據(jù),另一個(gè)是如何處理failover。數(shù)據(jù)共享一般的解決方案是通過(guò)SAN(Storage Area Network)來(lái)實(shí)現(xiàn),而數(shù)據(jù)同步可以通過(guò)rsync軟件或DRBD技術(shù)來(lái)實(shí)現(xiàn)。failover的意思是指當(dāng)服務(wù)器死機(jī)或出現(xiàn)錯(cuò)誤時(shí)可以自動(dòng)切換到其他備用服務(wù)器,不影響服務(wù)器上業(yè)務(wù)系統(tǒng)的運(yùn)行。
常用的解決方案有:主從復(fù)制、MMM高可用、Heartbeat/SAN、Heartbeat/DRBD,還有MySQL Clustter高可用解決方案。下面將重點(diǎn)介紹主從復(fù)制高可用解決方案。
下面配置文章內(nèi)容基本上來(lái)自于:http://www.cnblogs.com/zhoujie/p/mysql1.html
僅對(duì)運(yùn)行過(guò)程出現(xiàn)錯(cuò)誤的地方進(jìn)行局部的修改,已標(biāo)注出。
Mysql的主從復(fù)制至少是需要兩個(gè)Mysql的服務(wù),當(dāng)然Mysql的服務(wù)是可以分布在不同的服務(wù)器上,也可以在一臺(tái)服務(wù)器上啟動(dòng)多個(gè)服務(wù)。
首先確保主從服務(wù)器上的Mysql版本相同。
?
一、安裝部署mysql
1、 安裝服務(wù)器端:yum install mysql-server
yum install mysql-devel
安裝客戶端: ? yum install mysql
2、啟動(dòng)服務(wù)
service mysqld start
3、安裝完后執(zhí)行下面命令進(jìn)行初始化配置,會(huì)要求設(shè)置密碼:
/usr/bin/mysql_secure_installation
4、設(shè)置允許遠(yuǎn)程連接到該mysql服務(wù)器
登陸到mysql:?mysql?-uroot?-ptest123
[root@zhoujietest ~]# mysql -uroot -ptest123 #賬號(hào)root,密碼test123 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 18 Server version: 5.5.35-log MySQL Community Server (GPL) by RemiCopyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>這時(shí)比如通過(guò)navicat連接是是失敗的。需要設(shè)置下mysql庫(kù)下面的user表:
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | cmdb | | mysql | | performance_schema | | test | +--------------------+ 5 rows in set (0.00 sec)mysql> use mysql; Database changed mysql> update user set host='%' where user='root'; ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY' mysql>雖然提示更新失敗,但實(shí)際上是更新成功的。設(shè)置允許任意主機(jī)連接。
若是進(jìn)入mysql報(bào)這個(gè)錯(cuò):Access denied for user (using password: YES)
則如下解決:
1)、關(guān)閉mysql
? service mysqld stop
2)、屏蔽權(quán)限
mysqld_safe --skip-grant-table
3)、另起一個(gè)終端執(zhí)行如下:
[root@zhoujietest ~]#mysql -u rootmysql>delete from user where user='';mysql>flush privileges; #這個(gè)一定要執(zhí)行,否則關(guān)閉之前的終端錯(cuò)誤會(huì)重現(xiàn)mysql>\q?
二、配置mysql主從同步
準(zhǔn)備兩臺(tái)測(cè)試的虛擬機(jī),如上安裝mysql環(huán)境,并開(kāi)啟mysql服務(wù)
主master : 192.168.8.10
從slave ?: ??192.168.8.11
1、配置主庫(kù):
1)、授權(quán)給從數(shù)據(jù)庫(kù)服務(wù)器
mysql>GRANT REPLICATION SLAVE ON *.* to 'rep1'@'192.168.8.11' identified by 'test123456'; mysql>FLUSH PRIVILEGES;2)、修改主庫(kù)配置文件,開(kāi)啟binlog,并設(shè)置server-id,每次修改配置文件后都要重啟mysql服務(wù)才會(huì)生效
vim /etc/my.cnf
在該配置文件[mysqld]下面添加下面內(nèi)容:
[mysqld] log-bin=/var/lib/mysql/binlog server-id=1 binlog-do-db = cmdbdatadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock ......server-id:master端的ID號(hào);
log-bin:同步的日志路徑及文件名,一定注意這個(gè)目錄要是mysql有權(quán)限寫(xiě)入的(我這里是偷懶了,直接放在了下面那個(gè)datadir下面);
binlog-do-db:要同步的數(shù)據(jù)庫(kù)名
還可以顯示 設(shè)置不同步的數(shù)據(jù)庫(kù):
binlog-ignore-db = mysql 不同步mysql庫(kù)和test庫(kù)
binlog-ignore-db = test
?
修改配置文件后,重啟服務(wù):service mysqld restart
如果啟動(dòng)失敗,通過(guò)cat /var/log/mysqld.log | tail -30 ?查看mysql啟動(dòng)失敗的日志,從日志內(nèi)容尋找解決方案。
3)、查看主服務(wù)器當(dāng)前二進(jìn)制日志名和偏移量,這個(gè)操作的目的是為了在從數(shù)據(jù)庫(kù)啟動(dòng)后,從這個(gè)點(diǎn)開(kāi)始進(jìn)行數(shù)據(jù)的恢復(fù)
mysql> show master status; +---------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +---------------+----------+--------------+------------------+ | binlog.000001 | 1304 | cmdb | | +---------------+----------+--------------+------------------+ 1 row in set (0.00 sec)主服務(wù)器已配置好。
?
2、配置從庫(kù)
1)、理所當(dāng)然也是從配置文件著手,在/etc/my.cnf 添加下面配置:
[mysqld] server-id=2 master-host=192.168.8.10 master-user=rep1 master-password=test123456 master-port=3306 replicate-do-db=cmdb ......重啟時(shí)報(bào)錯(cuò):mysqld: unknown variable ‘master-host=
說(shuō)明mysql不認(rèn)識(shí)這些變量,網(wǎng)上搜羅了一番,原因是mysql5.5+版本主從復(fù)制不支持這些變量,需要在從庫(kù)上用命令來(lái)設(shè)置,從庫(kù)my.cnf里只保留server-id和
replicate-do-db兩個(gè)參數(shù)。 : mysql> CHANGE MASTER TO MASTER_HOST='192.168.8.10',MASTER_PORT=3306,MASTER_USER='rep1',MASTER_PASSWORD='test123456',MASTER_LOG_FILE='binlog.000001',MASTER_LOG_POS=1304; #后面兩個(gè)參數(shù)的值與主庫(kù)保持一致,執(zhí)行show master status時(shí),輸出的position2)、啟動(dòng)slave進(jìn)程
mysql> start slave; Query OK, 0 rows affected (0.04 sec)3)、查看slave的狀態(tài),如果下面兩項(xiàng)值為YES,則表示配置正確:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
特別注意:此處應(yīng)為start slave
從庫(kù)正在等待主庫(kù)更新數(shù)據(jù)。。。Waitin for master to send event...
?
三、同步主庫(kù)已有數(shù)據(jù)到從庫(kù)
主庫(kù)操作:
1、停止主庫(kù)的數(shù)據(jù)更新操作
mysql>flush tables with read lock;2、新開(kāi)終端,生成主數(shù)據(jù)庫(kù)的備份(導(dǎo)出數(shù)據(jù)庫(kù))
[root@zhoujietest ~]# mysqldump -uroot -ptest123 cmdb > cmdb.sql3、將備份文件傳到從庫(kù)
[root@zhoujietest ~]# scp cmdb.sql root@192.168.8.11:/root/4、主庫(kù)解鎖
mysql>unlock tables;?
從庫(kù)操作:
1、停止從庫(kù)slave
mysql>stop slave;2、新建數(shù)據(jù)庫(kù)cmdb
mysql> create database cmdb default charset utf8;3、導(dǎo)入數(shù)據(jù)
[root@ops-dev ~]# mysql -uroot -ptest123 cmdb<cmdb.sql4、查看從庫(kù)已有該數(shù)據(jù)庫(kù)和數(shù)據(jù)?
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | cmdb | | mysql | | performance_schema | | test | +--------------------+?
此時(shí)主從庫(kù)的數(shù)據(jù)完全一致,如果對(duì)主庫(kù)進(jìn)行增刪改操作,從庫(kù)會(huì)自動(dòng)同步進(jìn)行操作。
總結(jié)
以上是生活随笔為你收集整理的Mysql的高可用方案及主从详细配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: windows 下架设svn服务器
- 下一篇: 图论算法(一)--最短路径的DFS/BF