第十五周作業(yè)

1、編寫腳本,支持讓用戶自主選擇,使用mysqldump還是xtraback全量備份议街。

[root@centos7 ~]# cat backup_mysql.sh

#!/bin/bash

BACKUP_DIR=/data/backup

USER=root

PASSWD=root

[ -d $BACKUP_DIR ] || mkdir $BACKUP_DIR

while true;do

cat <<EOF

Please input a number to choice you back up tool:

1.mysqldump

2.xtrabackup

3.quit

EOF

read -p "Your choose: " choose

case "$choose" in

? 1)

? ? mysqldump -u$USER -p$PASSWD -A -F -E -R --single-transaction --master-data=1 --flush-privileges --triggers --default-character-set=utf8 --hex-blob > $BACKUP_DIR/fullbak_$(date +%F_%T).sql

? ? ;;

? 2)

? ? innobackupex --user=$USER --password=$PASSWD $BACKUP_DIR

? ? ;;

? 3)

? ? echo "Bye!" && exit 2

? ? ;;

? *)

? ? echo "Choose Error !" && exit 3

? ? ;;

esac

done

2、配置Mysql主從同步

主機(jī):兩臺璧榄,一臺當(dāng)主服務(wù)器master(192.168.17.27)特漩,一臺當(dāng)從服務(wù)器(192.168.17.37)

(1)安裝啟動(dòng)數(shù)據(jù)庫,并設(shè)置密碼

yum -y install mysql mysql-server mysql-devel

service mysqld restart? ? ? ? ? ? ? ? ?#啟動(dòng)數(shù)據(jù)庫

mysqladmin -u root password '123456'? ? ? ? ? #設(shè)置root用戶密碼

(2)修改主庫my.cnf主要設(shè)置個(gè)不一樣的ID骨杂,以及同步的數(shù)據(jù)庫的名字涂身,我一般用vim 來完成,vim /etc/my.cnf 在[mysqld]中加入內(nèi)容如下

server_id = 1 #主數(shù)據(jù)庫端ID號

log-bin = mysql-bin? #開啟二進(jìn)制日志? ? ? ? ? ? ? ? ? ?

binlog-do-db = db? ? ? #需要復(fù)制的數(shù)據(jù)庫名搓蚪,如果復(fù)制多個(gè)數(shù)據(jù)庫蛤售,重復(fù)設(shè)置這個(gè)選項(xiàng)即可? ? ? ? ? ? ? ?

log-slave-updates? ? ? #將從服務(wù)器從主服務(wù)器收到的更新記入到從服務(wù)器自己的二進(jìn)制日志文件中? ? ? ? ? ? ? ? ? ?

sync_binlog = 1? ? ? #控制binlog的寫入頻率。每執(zhí)行多少次事務(wù)寫入一次(這個(gè)參數(shù)性能消耗很大,但可減小MySQL崩潰造成的損失)? ? ? ? ? ? ?

auto_increment_offset = 1? ? ? ? #這個(gè)參數(shù)一般用在主主同步中悍抑,用來錯(cuò)開自增值, 防止鍵值沖突?

auto_increment_increment = 1? ? ? ? #這個(gè)參數(shù)一般用在主主同步中,用來錯(cuò)開自增值, 防止鍵值沖突? ?

expire_logs_days = 7? ? ? #二進(jìn)制日志自動(dòng)刪除的天數(shù)杜耙,默認(rèn)值為0,表示“沒有自動(dòng)刪除”搜骡,啟動(dòng)時(shí)和二進(jìn)制日志循環(huán)時(shí)可能刪除? ? ? ? ? ? ?

log_bin_trust_function_creators = 1? #將函數(shù)復(fù)制到slave? ?

(3)登錄主庫賦予從庫權(quán)限賬號,允許用戶在主庫上讀取日志(用戶名:admin佑女,密碼:123456)

mysql -uroot -p123456 #創(chuàng)建slave賬號admin记靡,密碼123456

grant replication slave on *.* to 'admin'@'192.168.100.20' identified by '123456';? ? #更新數(shù)據(jù)庫權(quán)限

mysql>flush privileges;?

(4)鎖主庫表,顯示主庫信息

flush tables with read lock;

顯示主庫信息

show master status;

mysql> show master status;

+---------------+----------+--------------+------------------+

| File? ? ? ? ? | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+---------------+----------+--------------+------------------+

| binlog.000002 |? ? ? 106 | haocheng? |? ? ? ? ? ? ? ? ? |

+---------------+----------+--------------+------------------+

1 row in set (0.00 sec)

(記錄file团驱、position,從庫設(shè)置將會(huì)用到)

(5)修改從庫my.cnf?

server_id = 2

log-bin = mysql-bin

log-slave-updates

sync_binlog = 0

innodb_flush_log_at_trx_commit = 0? ? ? #log buffer將每秒一次地寫入log file中摸吠,并且log file的flush(刷到磁盤)操作同時(shí)進(jìn)行。該模式下在事務(wù)提交的時(shí)候嚎花,不會(huì)主動(dòng)觸發(fā)寫入磁盤的操作?

replicate-do-db = db? #指定slave要復(fù)制哪個(gè)庫? ? ?

#MySQL主從復(fù)制的時(shí)候寸痢,當(dāng)Master和Slave之間的網(wǎng)絡(luò)中斷,但是Master和Slave無法察覺的情況下(比如防火墻或者路由問題)紊选。Slave會(huì)等待slave_net_timeout設(shè)置的秒數(shù)后啼止,才能認(rèn)為網(wǎng)絡(luò)出現(xiàn)故障,然后才會(huì)重連并且追趕這段時(shí)間主庫的數(shù)據(jù)

slave-net-timeout = 60? ? ? ? ? ? ? ? ? ?

log_bin_trust_function_creators = 1

#master-host=192.168.100.10

#master-user=admin

#master-password=123456

(6)在從庫上設(shè)置同步

#執(zhí)行同步命令兵罢,設(shè)置主服務(wù)器ip献烦,同步賬號密碼,同步位置

mysql -u root -p123456

mysql>slave stop;

mysql>change master to master_host='10.10.20.111',master_user='account',master_password='123456',master_log_file='mysql-bin.000033',master_log_pos=337523;

#開啟同步功能

mysql>start slave;

(7)查看從服務(wù)器狀態(tài)

3卖词、使用MHA實(shí)現(xiàn)Mysql高可用


192.168.17.238 mha-manager

192.168.17.239 mysql-master

192.168.17.240 mysql-slave1

192.16817.241 mysql-slave2

1)mysql主服務(wù)器配置巩那,編輯mysql配置文件/etc/my.cnf,在mysqld下添加如下選項(xiàng)

? ? vim /etc/my.cnf

? ? [mysqld]

? ? server_id = 1? ? ? ? ? ? ? ? #主從唯一標(biāo)識此蜈,主從架構(gòu)中的mysql實(shí)例該選項(xiàng)值必須唯一

? ? log-bin _ mysql-bin? ? ? #開啟二進(jìn)制日志文件

? ? skip_name_resolve=1

2)登錄mysql master實(shí)例創(chuàng)建主從同步賬號即横,在mysql主從集群所有節(jié)點(diǎn)執(zhí)行此操作

? ? ? create user 'repl'@'192.168.17.%' identified by 'repl';

? ? ? grant replication slave on *.* to 'repl'@'192.168.17.%';

? ? ? flush privileges;


? ? ? 重啟mariadb服務(wù)

? ? ? ? systemctl restart mysqld

? ? ? 登錄數(shù)據(jù)庫查看二進(jìn)制文件及位置

? ? ? ? MariaDB [(none)]> show master logs;

? ? ? ? ? +------------------+-----------+

? ? ? ? ? | Log_name? ? ? ? | File_size |

? ? ? ? ? +------------------+-----------+

? ? ? ? ? | mysql-bin.000001 |? ? ? 375 |

? ? ? ? ? | mysql-bin.000002 |? ? 1968 |

? ? ? ? ? +------------------+-----------+


3)mysql從節(jié)點(diǎn)配置 (多個(gè)從節(jié)點(diǎn)使用相同的方法進(jìn)行配置)

? ? vim /etc/my.cnf? 增加如下選項(xiàng)

? ? [mysqld]

? ? ? server_id = 2

? ? ? relay_log = relay-log? ? ? ? #啟用中繼日志

? ? ? read_only? ? ? ? ? ? ? ? ? ? ? ? #mysql的從節(jié)點(diǎn)開啟只讀

? ? ? relay_log_purge=0

? skip_name_resolve=1


? ? 重啟mysql服務(wù)

? ? ? systemctl restart mysqld

? 使用有復(fù)制權(quán)限的用戶賬號連接至主服務(wù)器,并啟動(dòng)復(fù)制線程

? ? ? CHANGE MASTER TO

? ? ? ? ? ? ? ? MASTER_HOST='192.168.17.239',

? ? ? ? ? ? ? ? MASTER_USER='repl',

? ? ? ? ? ? ? ? MASTER_PASSWORD='repl',

? ? ? ? ? ? ? ? MASTER_PORT=3306,

? ? ? ? ? ? ? ? MASTER_LOG_FILE='mysql-bin.000002',

? ? ? ? ? ? ? ? MASTER_LOG_POS=1968;

? ? 啟動(dòng)slave的sql和IO線程

? ? ? MariaDB [(none)]> start slave;


? 查詢slave的sql和IO線程是否正常

? ? MariaDB [(none)]> show slave status \G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.17.239

Master_User: repl

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000002

Read_Master_Log_Pos: 1968

Relay_Log_File: relay-log.000002

Relay_Log_Pos: 555

Relay_Master_Log_File: mysql-bin.000002

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

4)在主節(jié)點(diǎn)上導(dǎo)入數(shù)據(jù)驗(yàn)證主從數(shù)據(jù)是否同步

? ? mysql-master上導(dǎo)入hellodb庫

? ? MariaDB [hellodb]> source /root/hellodb_innodb.sql

? ? mysql-salve從節(jié)點(diǎn)檢查數(shù)據(jù)同步正常

? ? MariaDB [(none)]> show databases;

? ? ? +--------------------+

? ? ? | Database? ? ? ? ? |

? ? ? +--------------------+

? ? ? | hellodb? ? ? ? ? ? |

? ? ? | information_schema |

? ? ? | mysql? ? ? ? ? ? ? |

? ? ? | performance_schema |

? ? ? | test? ? ? ? ? ? ? |

? ? ? +--------------------+

5)在MHA-Manager管理幾點(diǎn)上安裝依賴包和mha4mysql-manager? mha4mysql-node包舶替,在mha集群的其他節(jié)點(diǎn)上安裝mha4mysql-node包令境。

? yum install -y perl-Mail-Sender perl-Email-Date-Format perl-MIME-Types perl-MIME-Lite perl-Parallel-ForkManager perl-Mail-Sendmail perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-YAML-Tiny perl-PAR-Dist perl-Module-ScanDeps perl-Module-CoreList perl-Module-Build perl-CPAN perl-YAML perl-CPANPLUS perl-File-Remove perl-Module-Install

? ? yum -y install mha4mysql-manager-0.58-0.el7.centos.noarch.rpm mha4mysql-node-0.58-0.el7.centos.noarch.rpm

? ? 軟件包下載地址:

? ? ? ? ? ? https://github.com/yoshinorim/mha4mysql-manager

? ? ? ? ? ? https://github.com/yoshinorim/mha4mysql-node

6)在集群所有的節(jié)點(diǎn)上相互配置ssh基于key驗(yàn)證,這里配置集群所有的主機(jī)使用同一個(gè)公鑰和私鑰

? ssh-keygen

? ssh-copy-id 127.0.0.1

? scp -r /root/.ssh? root@remoteIp:/root/

7)在管理節(jié)點(diǎn)建立配置文件

? ? ? 創(chuàng)建存放配置文件的目錄 mkdir -p /etc/mastermha

? ? ? vim /etc/mastermha/app1.conf

? ? ? [server default]

? ? ? user=mhauser

? ? ? password=mhauser

? ? ? manager_workdir=/data/mastermha/app1/

? ? ? manager_log=/data/mastermha/app1/manager.log

? ? ? remote_workdir=/data/mastermha/app1/

? ? ? ssh_user=root

? ? ? repl_user=repl

? ? ? repl_password=repl

? ? ? ping_interval=1

? ? ? [server1]

? ? ? hostname=192.168.17.239

? ? ? candidate_master=1

? ? ? [server2]

? ? ? hostname=192.168.17.240

? ? ? candidate_master=1

? ? ? [server3]

? ? ? hostname=192.168.17.241

8)登錄mysql master創(chuàng)建mha管理賬號

? ? ? create user 'mhauser'@'192.168.17.%' identified by 'mhauser';

? ? ? grant all on *.* to 'mhauser'@'192.168.17.%';

9)使用的是二進(jìn)制方式安裝mysql顾瞪,需要設(shè)置mysql命令的軟鏈接舔庶,否則執(zhí)行檢查會(huì)提示命令找不到錯(cuò)誤。

? ? ln -s /usr/local/mysql/bin/mysqlbinlog /usr/local/bin/mysqlbinlog

ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql

10)Mha驗(yàn)證和啟動(dòng)

? ? ? 驗(yàn)證節(jié)點(diǎn)之間ssh key相互登錄

? ? ? masterha_check_ssh --conf=/etc/mastermha/app1.cnf

? ? ? 顯示如下結(jié)果為成功

? ? ? Sun Feb 23 16:17:15 2020 - [info] All SSH connection tests passed successfully.

? ? ? mha主從復(fù)制測試

? ? ? masterha_check_repl --conf=/etc/mastermha/app1.cnf

? ? ? Sat Feb 29 15:13:16 2020 - [info] Checking replication health on 192.168.17.240..

? ? ? Sat Feb 29 15:13:16 2020 - [info]? ok.

? ? Sat Feb 29 15:13:16 2020 - [info] Checking replication health on 192.168.17.241..

? ? Sat Feb 29 15:13:16 2020 - [info]? ok.

? ? Sat Feb 29 15:13:16 2020 - [warning] master_ip_failover_script is not defined.

? ? Sat Feb 29 15:13:16 2020 - [warning] shutdown_script is not defined.

? ? Sat Feb 29 15:13:16 2020 - [info] Got exit code 0 (Not master dead).

? ? MySQL Replication Health is OK.

? ? ? 啟動(dòng)mha陈醒,使用后臺運(yùn)行

? ? ? nohup masterha_manager --conf=/etc/mastermha/app1.cnf &> /dev/null &

? ? ? ps -aux|grep mha

? ? ? root? ? 24329? 2.6? 0.4 207436 21948 pts/1? ? S? ? 15:17? 0:00 perl /usr/bin/masterha_manager --conf=/etc/mastermha/app1.cnf

模擬17.239主服務(wù)器故障惕橙,集群自動(dòng)提升其他節(jié)點(diǎn)為主節(jié)點(diǎn),停止17.239mysql服務(wù)钉跷,查看mha日志自動(dòng)將配置文件中定義的候選節(jié)點(diǎn)240替身為mysql master弥鹦。

Started automated(non-interactive) failover.

The latest slave 192.168.17.240(192.168.17.240:3306) has all relay logs for recovery.

Selected 192.168.17.240(192.168.17.240:3306) as a new master.

192.168.17.240(192.168.17.240:3306): OK: Applying all logs succeeded.

192.168.17.241(192.168.17.241:3306): This host has the latest relay log events.

Generating relay diff files from the latest slave succeeded.

192.168.17.241(192.168.17.241:3306): OK: Applying all logs succeeded. Slave started, replicating from 192.168.17.240(192.168.17.240:3306)

192.168.17.240(192.168.17.240:3306): Resetting slave info succeeded.

Master failover to 192.168.17.240(192.168.17.240:3306) completed successfully.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子彬坏,更是在濱河造成了極大的恐慌朦促,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栓始,死亡現(xiàn)場離奇詭異务冕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)幻赚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進(jìn)店門禀忆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人落恼,你說我怎么就攤上這事箩退。” “怎么了佳谦?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵戴涝,是天一觀的道長。 經(jīng)常有香客問我吠昭,道長喊括,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任矢棚,我火速辦了婚禮郑什,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蒲肋。我一直安慰自己蘑拯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布兜粘。 她就那樣靜靜地躺著申窘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪孔轴。 梳的紋絲不亂的頭發(fā)上剃法,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天,我揣著相機(jī)與錄音路鹰,去河邊找鬼贷洲。 笑死,一個(gè)胖子當(dāng)著我的面吹牛晋柱,可吹牛的內(nèi)容都是我干的优构。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼雁竞,長吁一口氣:“原來是場噩夢啊……” “哼钦椭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤彪腔,失蹤者是張志新(化名)和其女友劉穎侥锦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體德挣,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捎拯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盲厌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,438評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡祸泪,死狀恐怖吗浩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情没隘,我是刑警寧澤懂扼,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站右蒲,受9級特大地震影響阀湿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瑰妄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一陷嘴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧间坐,春花似錦灾挨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蜈七,卻和暖如春秒拔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背飒硅。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工砂缩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人狡相。 一個(gè)月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓梯轻,卻偏偏與公主長得像,于是被迫代替她去往敵國和親尽棕。 傳聞我的和親對象是個(gè)殘疾皇子喳挑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評論 2 359