日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 主主互备实现

發(fā)布時間:2023/12/19 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 主主互备实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ? ?今天星期天,么事就寫個MYSQL的主主架構(gòu)的博客,原理如下圖,不是我畫的網(wǎng)上找的。


主機作用操作系統(tǒng)mysql版本對應(yīng)IPvip數(shù)據(jù)庫
mysqlA(主)centos6.4
mysql?5.5.48192.168.48.129192.168.48.126
mysqlB(備)centos6.4mysql?5.5.48192.168.48.132


? 一: 在每個節(jié)點安裝mysql數(shù)據(jù)庫:

? ? ? ?《1》到官網(wǎng)去下載最新的yum倉庫,并安裝

??????? http://dev.mysql.com/downloads/repo/yum/ ?

????????yum install mysql-community-server

? ? ? ?《2》用第三方y(tǒng)um

????????????1、導(dǎo)入第三方源webtatic

????????????????rpm -Uvh http://repo.webtatic.com/yum/el6/latest.rpm
????????????2、如果已安裝低版本的mysql就刪除

????????????????yum remove mysql mysql-*
????????????3、安裝libmysqlclient15

????????????????yum install libmysqlclient15 --enablerepo=webtatic
????????????4、安裝mysql5.5
????????????????yum install mysql55 mysql55-server --enablerepo=webtatic

? ? ? ?《3》安裝MariaDB? 我這里用的這安裝的

??????????? 1、vi /etc/yum.repos.d/MariaDB.repo? 加個文件在yum倉庫中

?[mariabd]name=MariaDBbaseurl=http://yum.mariadb.org/5.5.48/centos6-x86/gpgkey=http://yum.mariadb.org/RPM-GPG-KEY-MariaDBgpgcheck=1yum?install?-y?MariaDB-server?MariaDB-client??##安裝數(shù)據(jù)庫service?mysql?start??##啟動服務(wù)GRANT?ALL?PRIVILEGES?ON?*.*?TO?root@"%"?IDENTIFIED?BY?"123456";##設(shè)置ROOT密碼;update?mysql.user?set?authentication_string=password('123456')?where?user='root'?;##mysql5.7這樣更新密碼。flush?privileges;##刷新

? ? ? 《4》下面是我安裝的數(shù)據(jù)庫的一些信息

? ? ??

? ? ?

二、 在Mysql上配置my.cnf

? ? 《1》配置MysqlA

????innodb_file_per_table = on

????skip_name_resolve = on

????server-id = 1

????log-bin = mysql-bin

????relay-log = mysql-relay-bin ? #單個主從這個可以不寫

????replicate-wild-ignore-table=mysql.%

????replicate-wild-ignore-table=test.%

????replicate-wild-ignore-table=information_schema.%

? ? 《2》配置MysqlB

? ? ?

? ? server-id = 2

? ? log-bin = mysql-bin ?###單個主從這個可以不寫,咱們是互相主從都要設(shè)置

? ? relay-log = mysql-relay-bin

? ? replicate-wild-ignore-table=mysql.%

? ? replicate-wild-ignore-table=test.%

? ? replicate-wild-ignore-table=information_schema.%

? ?注釋:

? ?server-id 是節(jié)點的標(biāo)識,主從節(jié)點不能相同,必須唯一。

? ?log-bin 表示開啟mysql的binlog日志功能。

? ‘mysql-bin’表示日志文件的名稱,也可以叫aa.log 看你自己了,mysql會在名稱后面加上數(shù)字,mysql-bin.000001、mysql-bin.000002等日志文件

? ?relay-log 用來定義relay-log日志文件

? ?replicate-wild-ignore-table是復(fù)制過程過濾選項,可以過濾不需要的數(shù)據(jù)庫和表,例如 'mysql.%' 表示不復(fù)制mysql庫

? ?replicate-wild-do_table ?明確指定復(fù)制那個數(shù)據(jù)庫和表

? ?注意:不要在主庫上使用binlog-do-db 或者 binlog-ignore-db 選項,也不要在從庫上使用replicate-do-db或者replicate-ignore-db選項,因為這樣可能產(chǎn)生跨庫更新失敗的問題,建 ? ?議在從庫使用replicate-wild-do-table和replicate-wild-ignore-table連個選項解決復(fù)制過濾的問題。

三、 手動同步一次數(shù)據(jù),新數(shù)據(jù)庫不用這部分

? 可以直接鎖定 ?flush tables with read lock; 或者直接關(guān)閉數(shù)據(jù)庫打包目錄/var/lib/mysql ?到從服務(wù)器恢復(fù)。

? tar zcvf /var/lib/mysql.tar.gz ?/var/lib/mysql ?到備的上面解壓。

??

??

? 在my.cnf ?添加read-only=1開啟只讀 ?目的都是保證復(fù)制前數(shù)據(jù)都是一樣的。

四、配置MysqlA---MysqlB的主從配置

《1》在MysqlA創(chuàng)建復(fù)制用戶并且授權(quán)。

? ? ?grant replication slave on *.* to 'tao'@'192.168.48.%' identified by 'www.daxia.help';

《2》在B服務(wù)器上設(shè)置主服務(wù)器信息:注意:master_log_file和master_log_pos這兩個選項的值要對應(yīng)在MysqlA上通過SQL語句"show master status" 查詢到的值

?change master to \

?master_host='192.168.48.129',

?master_user='tao',

?master_password='www.daxia.help',

?master_log_file='mysql-bin。000005',

?master_log_pos=405;

五、配置MysqlB---MysqlA的主從配置

《1》在MysqlB創(chuàng)建復(fù)制用戶并且授權(quán)

? ? ?grant replication slave on *.* to 'tao'@'192.168.48.%' identified by 'www.daxia.help';

《2》在A服務(wù)器上設(shè)置主服務(wù)器信息:注意:master_log_file和master_log_pos這兩個選項的值要對應(yīng)在MysqlB上通過SQL語句"show master status" 查詢到的值

?change master to \

?master_host='192.168.48.132',

?master_user='tao',

?master_password='www.daxia.help',

?master_log_file='mysql-bin',

?master_log_pos=106;

注意:

?我在主上執(zhí)行了自己同步自己了 要取消用這個命令?change master to master_host=' ';


六:在MysqlA和MysqlB上測試數(shù)據(jù)的復(fù)制情況


《2》在MysqlB上建立庫,表和插入數(shù)據(jù)在MysqlA上查看;


? 《3》我在test下面建立了一個表,是不能同步過來的,說明過濾也對的

七:配置keepalived實現(xiàn)mysql雙主高可用。

keepalived 配置主和從的配置就是priority 優(yōu)先級一個100一個90 從的取消nopreempt選項即可。

!?Configuration?File?for?keepalived global_defs?{notification_email?{acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from?Alexandre.Cassen@firewall.locsmtp_server?192.168.200.1smtp_connect_timeout?30router_id?LVS_DEVEL } Vrrp_script?check_mysqld?{ script?"/etc/keepalived/check_slave.pl?127.0.0.1" interval?2 weight?21 } vrrp_instance?HA_1?{state?BACKUP??????###??在MYSQLA和MysqlB上都配置為BACKUPinterface?eth0virtual_router_id?80priority?100advert_int?2nopreempt????????????##?不搶占模式,只在優(yōu)先權(quán)高的服務(wù)器上設(shè)置,優(yōu)先級第的可以不設(shè)置authentication?{auth_type?PASSauth_pass?daxia.help}track_script?{ check_mysqld }virtual_ipaddress?{192.168.48.126} }

?check_slave.pl腳本如下:

#!/usr/bin/perl?-w use?DBI; use?DBD::mysql;#?CONFIG?VARIABLES $SBM?=?120; $db?=?"mysql"; $host?=?$ARGV[0]; $port?=?3306; $user?=?"root"; $pw?=?"123456";#?SQL?query $query?=?"show?slave?status";$dbh?=?DBI->connect("DBI:mysql:$db:$host:$port",?$user,?$pw,?{?RaiseError?=>?0,PrintError?=>?0?});if?(!defined($dbh))?{exit?1; }$sqlQuery?=?$dbh->prepare($query); $sqlQuery->execute;$Slave_IO_Running?=??""; $Slave_SQL_Running?=?""; $Seconds_Behind_Master?=?"";while?(my?$ref?=?$sqlQuery->fetchrow_hashref())?{$Slave_IO_Running?=?$ref->{'Slave_IO_Running'};$Slave_SQL_Running?=?$ref->{'Slave_SQL_Running'};$Seconds_Behind_Master?=?$ref->{'Seconds_Behind_Master'}; }$sqlQuery->finish; $dbh->disconnect();if?(?$Slave_IO_Running?eq?"No"?||?$Slave_SQL_Running?eq?"No"?)?{exit?1; }?else?{if?(?$Seconds_Behind_Master?>?$SBM?)?{exit?1;}?else?{exit?0;} }

八、進行測試:

《1》登錄

《2》建立庫和表看看各個節(jié)點的信息是否正確。

在遠程上建立信息:

在MysqlB和MYSQLA上查看都有信息:

《3》把mysqlB弄故障,看切換的正確可行:

注意的問題:

? ? ?經(jīng)過我測試我,我的監(jiān)控腳本這樣寫的把那個weight選項取消就可以使用高可用,要是加上就會出現(xiàn)在mysqlA復(fù)制出錯,vip就會漂移到mysqlB上面,這時把MysqlA修復(fù)好后加上nopreempt選項就不會搶占,當(dāng)這時候Mysqlb的復(fù)制出問題了就不會漂移VIP因為那個weight優(yōu)先級的問題,搞了很久也不行,反正把它取消就可以使用咱們的高可用,你要是能解決請下面留言給我,咱們一起學(xué)習(xí)。

vrrp_script?check_mysqld?{script?"/etc/keepalived/mysql.pl?127.0.0.1"interval?2}

還有就是在寫檢測腳本的時候先進行運行測試:

[root@test1?keepalived]#?./mysql.pl?127.0.0.1 [root@test1?keepalived]#?echo?$? 0

正常就是0不正常就是1測試正常在上還要安裝依賴的# yum install??perl-DBI perl-DBD-MySQL -y確保這些包也安裝了要調(diào)用這些庫。



九、用shell腳本的方法配置Keepalived,連個就是下面檢測自己的ip3306端口就行我貼一個主機的(注意這個方法沒有上面的好因為只能檢測3306端口不知道slave的情況,測試直接關(guān)掉MYSQL)

!?Configuration?File?for?keepalived global_defs?{notification_email?{acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from?Alexandre.Cassen@firewall.locsmtp_server?192.168.200.1smtp_connect_timeout?30router_id?LVS_DEVEL } vrrp_instance?HA_1?{state?BACKUPinterface?eth0virtual_router_id?80priority?100advert_int?2nopreemptauthentication?{auth_type?PASSauth_pass?daxia.help}virtual_ipaddress?{192.168.48.126}virtual_server?192.168.48.126?3306?{????????///檢測自己的3306端口不通就執(zhí)行下面的Mysql.sh腳本重啟keepalived服務(wù)讓vip飄到另外的機器上去 delay_loop?6 lb_algo?wrr lb_kind?DR? nat_mask?255.255.255.0 persistence_timeout?50 real_server?192.168.48.129?3306?{ weight?1 notify_down?/etc/keepalived/mysql.sh TCP_CHECK?{ connect_timeout?10???? nb_get_retry????3 connect_port?3306? } } }

mysql.sh腳本如下

[root@test1?keepalived]#?vi?mysql.sh? #!/bin/bash /etc/init.d/keepalived??stop sleep?10 /etc/init.d/keepalived??start

我停止mysql 就會觸發(fā)腳本讓vip飄到另外一個機器上下面是keepalive的信息:



配置完成!!!



轉(zhuǎn)載于:https://blog.51cto.com/shaonian/1757212

總結(jié)

以上是生活随笔為你收集整理的mysql 主主互备实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。