mysql主從復制及zabbix監控從服務器

Mysql備份

備份系統的構建,要注意的要點:

第一:能容忍最多丟失多少數據;

第二:恢復數據需要在多長時間內完成;

第三:需要恢復哪些數據:備份時要考慮備份完整;

(1)必須做還原測試,用于測試備份的可用性;

(2)還原演練;不是一個人能夠完成的;

備份類型:

完全備份:就是備份整個數據集,是從時間軸上劃分的,完整數據集;;

部分備份:只備份數據子集;

      增量備份:僅備份最近一次完全備份或增量備份(如果存在增量)以來變化的數據;備份的是從上一次備份為起點到備份時的變化的數據;問題是還原起來比較麻煩;但很節約空間;是從時間軸上的變化量來備份的;是相對上一次的數據變化;

差異備份:僅備份最近一次完全備份以來變化的數據;起點都是從完全備份到備份時的差異部分;還原時用完全備份+最后一個差異就ok了;

注意:在實際使用備份策略時,應該使用完全備份+差異備份,或完全備份+增量備份

 

根據備份時的業務系統能否在線分為:

熱備:備份過程中讀寫操作均可執行;技術復雜;

溫備:讀操作可執行,但寫操作不成;

冷備:讀寫操作均不可執行;

MyISAM存儲引擎:可溫備,不能熱備;

InnoDB存儲引擎:可熱備;內部支持快照;

      InnoDB實現熱備是,當打算開始備份時,對整個數據做一次阻斷;內部做一個快照,而后就針對這個快照做備份就行了,InnoDB支持,因為它的每一次數據修改都有一個lsn日志序列號,但是MyISAM存儲引擎沒有,所以MyISAM存儲引擎就不能執行熱備;備份技術都跟存儲引擎是有關系的;

 

根據備份的方式分為:

物理備份:直接復制數據文件進行備份;

使用cp、tar命令復制數據;

邏輯備份:從數據庫中導出數據另存而進行的備份;

邏輯備份會轉換為文本數據后會丟失精度,占用更多空間,需要專用的客戶端才能進行;

物理備份,邏輯備份:與存儲引擎無關;

 

備份工具:

mysqldump

邏輯備份工具,適用于所有存儲引擎,支持溫備不支持熱備;可用于完全備份、部分備份

對InnoDB存儲引擎支持熱備;是通過啟動一個大事務進行的,可能會備份一天一夜,由于時間長會導致嚴重的資源競爭;

cp,tar等復制歸檔工具:

備份容易實現,但是物理備份工具,適用于所有存儲引擎;只適用于冷備,可做完全備份、部分備份;

lvm的快照:

可實現幾乎熱備,借助于文件系統管理工具進行備份;

Mysqlhotcopy

幾乎冷備;僅適用于MyISAM存儲引擎;

mysql自帶的程序

現在除了mysql自己的庫使用MyISAM存儲引擎,其它很少有人使用了;

 

備份工具的選擇:

方案一:mysqldump+復制binlog:可進行遠程備份;

mysqldump:做完全備份;

復制binlog中指定時間范圍內的event;做增量備份;

 

說明:如果數據集很小(幾十兆到幾百兆),每周可使用mysqldump進行一次完全備份,然后每一天(每1或2小時等根據需要)使用start-datetime和stop-datatime中間,取得binlog中的事件導出保存在一個sql文件中,這樣來備份;也可從上一個完全備份開始一直到現在,就能實現差異,如果是從上一次完全備份或增量開始就能實現增量;這種方案一般比較慢,但支持遠程備份;

因為mysqldump是myslq協議的客戶端工具;mysqlbinlog又可以遠程讀取事件,就意味著,備份過程就可以遠程進行了;mysql就自帶了這些工具;所以,在較小的數據集范圍內,對數據精度要求不是特別苛刻,而且對于備份和恢復過程又要求不是特別嚴格場景中,開使用這個兩個工具做備份;

 

mysqldump命令:

客戶端命令,支持通過mysql協議連接至mysqld服務器;

事實上就是向mysql服務器發起一個全量查詢操作,把所有數據拿到本地以后,并且將讀取到的數據保存在文件中,從而完成備份操作的;

-A –all-databases:備份所有庫;

-B –databases:指明備份的哪個庫

 

mysqldump [OPTIONS] database [tables]

備份指定庫中的表,沒有生成create database語句

 [root@centos7clean ~]# mysqldump -uroot -hlocalhost -p hellodb > ./hellodb

Enter password:   

MyISAM存儲引擎:支持溫備,備份時要鎖定表

      -x, –lock-all-tables:鎖定所有庫的所有表,讀鎖;

mysqldump [OPTIONS] –all-databases [OPTIONS]

[root@centos7clean ~]# mysqldump -uroot -hlocalhost -p -x –all-databases > ./hellodb4

Enter password:         //輸入mysql的密碼

      -l, –lock-tables:鎖定指定庫所有表;

mysqldump [OPTIONS] –databases [OPTIONS] DB1 [DB2 DB3…]

[root@centos7clean ~]# mysqldump -uroot -hlocalhost -p -l –databases hellodb > ./hellodb3

Enter password:

InnoDB存儲引擎:支持溫備和熱備;

      –single-transaction:創建一個事務,基于此快照執行備份;

[root@centos7clean ~]# mysqldump -uroot -hlocalhost -p –single-transaction –databases hellodb > ./hellodb2

Enter password:

注意:必須使用加鎖的方式進行備份,否則會造成數據不一致,使備份無法可用

其它必給選項

      –databases指定備份是數據庫一個或多個;
          
–all-databases備份所有數據庫;
          
–events, -E備份指定數據庫相關的所有event scheduler;
          
–routines, -R備份指定數據庫相關的所有存儲過程和存儲函數;
          
–triggers備份表相關的觸發器;
          
–skip-triggers不備份觸發器;

–master-data[=#]

      0:表示不記錄

      1:記錄為CHANGE MASTER TO語句,此語句不被注釋;

      2:記錄為CHANGE MASTER TO語句,此語句被注釋;

                     

      –flush-logs:鎖定表完成后,即進行日志刷新操作;

 

 

 

實驗1::做一次mysqldump的備份及還原完全步驟:

1、先做一側完全備份

[root@centos7clean ~]# mysqldump -uroot -hlocalhost -p -x -A -R -E –master-data=2 –flush-logs –triggers > ./hellodb $(date +%F-%T)

Enter password:

mysql主從復制及zabbix監控從服務器

在mysql做幾項修改

MariaDB [hellodb]> insert into students (name) values ('wang4');

Query OK, 1 row affected, 1 warning (0.01 sec)

MariaDB [hellodb]> drop table students;

Query OK, 0 rows affected (0.02 sec)

2、還原二進制日志:

[root@centos7clean ~]# mysqlbinlog /var/lib/mysql/master-log.000008   //查看drop表的起始位置

mysql主從復制及zabbix監控從服務器

[root@centos7clean ~]# mysqlbinlog –stop-position 481 /var/lib/mysql/master-log.000008 > /root/binlog.sql      //導出二進制日志在481的地方結束

MariaDB [hellodb]> set sql_log_bin = off;     //還原時不記錄二進制文件中

MariaDB [hellodb]> \. /root/hellodb2016-11-19-14:21:01         //還原完全備份

MariaDB [hellodb]> \. /root/binlog.sql         //還原二進制備份

MariaDB [hellodb]> set sql_log_bin = on;     //開啟記錄二進制文件中

方案二:lvm2快照+復制binlog:不常用了解

lvm2快照:使用cp或tar等做物理備份;做完全備份;

復制binlog中指定時間范圍內的event;做增量備份;

這其實就是物理+邏輯的方式實現;因為cp是物理備份,而復雜binlog中的event在還原時是邏輯還原的,備份出來的數據也是邏輯的;

實驗步驟:

前提:數據目錄位于邏輯卷,包含了數據文件和事務日志;

            (1) 請求鎖定所有表;

                 mysql> FLUSH TABLES WITH READ LOCK;

           (2) 記錄二進制文件事件位置;

                 mysql> FLUSH LOGS;

                 mysql> SHOW MASTER STATUS;

      mysql  -e  'SHOW MASTER STATUS;' >> /PATH/TO/SOME_POS_FILE

           (3) 創建快照卷

                 lvcreate  -L # -s -p r – SNAM-NAME /dev/VG-NAME/LV-NAME

           (4) 釋放鎖

                 mysql> UNLOCK TABLES

           (5) 掛載快照卷,并執行備份,備份完成后刪除快照卷;

           (6) 周期性備份二進制日志;

 

基于lvm備份具體步驟:
     
對整個邏輯卷做一個快照,快照卷里面沒有內容,快照之后所有對原卷的修改時,需要先將原卷內容復制一份到快照卷上,再在原卷上修改;通過快照卷訪問的數據,如果原卷沒改仍然通過原卷來訪問,如果原卷改了的,將通過快照卷復制原卷修改之前的副本來訪問;

1.連接到mysql上,請求鎖定所有表:
      > FLUSH TABLES WITH READ LOCK;
     
施加讀鎖,把所有表中的數據從內存同步到磁盤上;如果能請求到讀鎖,其它線程只能讀操作;如果此時,正有人在執行一個大事務,且正在做寫操作,此時就可能會等很長時間才能請求到讀鎖;
>    SHOW MASTER STATUS;

2.鎖定后,滾動一次二進制日志;記錄二進制日志文件及事件位置:
      > FLUSH LOGS;
      # mysql -e 'SHOW MASTER STATUS' > /root/pos.`date +%F`

      注意:二進制日志文件要從原卷中備份:
      # cp -a /data/mysql/binlogs/ /tmp

3.為邏輯創建快照:
      # lvcreate -L 2G -n mydata-snap -s -p r /dev/myvg/mydata

4.釋放全局讀鎖
      > UNLOCK TABLES;
     
模擬數據庫變化,做些修改操作;
           > USE hellodb;
           > DELETE FROM students WHERE StuID=5;
           > DELETE FROM students WHERE StuID=6;
           > DELETE FROM students WHERE StuID=11;
           > SELECT * FROM students;

5.掛載快照卷并備份
掛載快照卷:
      # mount -r /dev/myvg/mydata-snap /mnt
      備份數據文件
      # cp -a mysql/ /tmp
      注意:二進制日志文件要從原卷中備份:

6.刪除快照卷
     # umount /mnt
      # lvremove /dev/myvg/mydata-snap
     

模擬數據庫服務器崩潰:
      # systemctl stop mariadb.service
      # rm -rf /data/mysql/*
      模擬數據文件崩潰;
      # rm -rf /data/binlogs/*
      模擬二進制日志文件崩潰;

 

演示基于lvm還原:
1.還原數據文件:
      # cp -a /tmp/mysql/* /data/mysql/
     
還原數據文件;即直接拷貝回來;
      確保復制回來以后,文件的屬主、屬組是mysql;
2.啟動服務

# systemctl start mariadb.service
           > SHOW BINARY LOGS;
           > USE hellodb;
           > SELECT * FROM students;
          
崩潰前的數據;

3.讀取二進制日志文件中備份的事件位置
      # cat /pos-2016-06-05
      File Position Binlog_Do_DB Binlog_Ignore_DB
      mysql-bin.000004 245

4、在備份的二進制日志文件中找到mysql-bin.000004文件,從245位置后面,讀出所有事件,然后保存在一個sql文件中;
      # mysqlbinlog –start-position=245 mysql-bin.000004 > recovery.sql

5.重放事件:
      # mysql < recovery.sql

方案三:xtrabackup:支持完全備份、增量備份;

由percona提供的支持InnoDB做熱備,是物理備份的工具;

可以理解為復制底層數據塊,而非簡單的復制文件

MyISAM:溫備,不支持增量備份;

      InnoDB:熱備,增量;

實驗2.1:

1、安裝xtrabackup

[root@centos7clean ~]# yum -y install ./percona-xtrabackup-2.3.2-1.el7.x86_64.rpm

2、新建目錄并備份

[root@centos7clean ~]# mkdir /mydata

[root@centos7clean ~]# innobackupex –user=root –password= /mydata

mysql主從復制及zabbix監控從服務器

生成的文件說明:

mysql主從復制及zabbix監控從服務器

[root@centos7clean 2016-11-19_15-19-55]# cat backup-my.cnf

備份了還原時的基本特性

 [mysqld]

innodb_checksum_algorithm=innodb

innodb_log_checksum_algorithm=innodb

innodb_data_file_path=ibdata1:10M:autoextend

innodb_log_files_in_group=2

innodb_log_file_size=5242880

innodb_page_size=16384

innodb_log_block_size=512

innodb_undo_directory=.

innodb_undo_tablespaces=0

[root@centos7clean 2016-11-19_15-19-55]# cat xtrabackup_binlog_info

master-log.000008     594      //備份時那一刻二進制文件和position

 

[root@centos7clean 2016-11-19_15-19-55]# cat xtrabackup_info

備份時程序自己的一些相關信息

uuid = 864f15ea-acec-11e6-89ee-000c299ef417

name =

tool_name = innobackupex         //備份的程序

tool_command = –user=root –password=… /mydata       //賬號等信息

tool_version = 2.3.2               //程序的版本號

ibbackup_version = 2.3.2

server_version = 5.5.44-MariaDB-log

start_time = 2016-11-19 15:19:56      //啟動時間

end_time = 2016-11-19 15:19:58       //結束時間

lock_time = 0

binlog_pos = filename 'master-log.000008', position '594'

innodb_from_lsn = 0

innodb_to_lsn = 9375874

partial = N

incremental = N

format = file

compact = N

compressed = N

encrypted = N

 

[root@centos7clean 2016-11-19_15-19-55]# cat xtrabackup_checkpoints

文件的核查點

backup_type = full-backuped           //備份的類型

from_lsn = 0

to_lsn = 9375874

last_lsn = 9376086

compact = 0

recover_binlog_info = 0

 

 

 

 

 

3、還原到10.1.72.50

開啟mariadb服務

50:[root@localhost ~]# systemctl stop mariadb    //在目標主機上還原明mysql不能啟動

[root@ ~]# yum -y install ./percona-xtrabackup-2.3.2-1.el7.x86_64.rpm

60:[root@ mydata]# scp -rp 2016-11-19_15-19-55/ 10.1.72.50:/mydata

[root@ ~]# scp percona-xtrabackup-2.3.2-1.el7.x86_64.rpm  10.1.72.50:/root

——————

[root@localhost mysql]# innobackupex –apply-log /mydata/2016-11-19_15-19-55/       //應用日志,該提交提交該回滾回滾

mysql主從復制及zabbix監控從服務器

[root@localhost mydata]# innobackupex –copy-back /mydata/backup/2016-11-19_15-19-55/

mysql主從復制及zabbix監控從服務器

此處特別注意:

在/etc/my.cnf中必須指定、datadir=要恢復的目錄

4、更改mysql數據目錄的屬主屬組

[root@localhost mydata]# chown -R mysql.mysql /var/lib/mysql/

5、修改my.cnf

由xtrabackup還原后innodb事務日志的大小改為48m,原mysql默認為5m

不匹配,所以要修改innodb_log_file_size參數

-rw-r—– 1 mysql mysql 50331648 Nov  6 21:44 ib_logfile0

-rw-r—– 1 mysql mysql 50331648 Nov  6 21:44 ib_logfile1

[root@localhost mysql]# vim /etc/my.cnf

[mysqld]

socket=/var/lib/mysql/mysql.sock

datadir=/var/lib/mysql

symbolic-links=0

innodb_log_file_size = 50331648

——————-

實驗2.2

MariaDB [hellodb]> insert into students (name) values ('wang5');

Query OK, 1 row affected, 1 warning (0.01 sec)

 

1.做增量備份

[root@centos7clean mydata]# innobackupex –user=root –password= –incremental /mydata –incremental-basedir=/mydata/2016-11-19_15-19-55

      –incremental:明確指明做增量備份

      –incremental-basedir:基于上次備份的哪個目錄做增量備份

[root@centos7clean 2016-11-19_17-11-32]# less xtrabackup_checkpoints

mysql主從復制及zabbix監控從服務器

2.再次修改數據

MariaDB [hellodb]> delete from students where stuid=31;

Query OK, 1 row affected (0.01 sec)

3.再做一次增量備份

[root@centos7clean 2016-11-19_17-11-32]# innobackupex –user=root –password= –incremental /mydata –incremental-basedir=/mydata/2016-11-19_17-11-32

查看記錄到哪個binlog

[root@centos7clean 2016-11-19_17-21-22]# less xtrabackup_binlog_info

master-log.000008       1029

4.再做修改

MariaDB [hellodb]> insert into students (name) value ('wang6');

Query OK, 1 row affected, 1 warning (0.30 sec)

5.導出二進制文件

[root@centos7clean mysql]# mysqlbinlog –start-position=1029 master-log.000008 > /mydata/binlog.sql

mysql主從復制及zabbix監控從服務器

6.還原:

[root@localhost mydata]# innobackupex –apply-log –redo-only 2016-11-19_15-19-55/

–redo-only:只提交不回滾

7.合并第一次增量

[root@localhost mydata]# innobackupex –apply-log –redo-only 2016-11-19_15-19-55/ –incremental-dir=/mydata/2016-11-19_17-11-32 //

 

 

8.合并第二次增量

[root@localhost mydata]# innobackupex –apply-log  2016-11-19_15-19-55/ –incremental-dir=/mydata/2016-11-19_17-21-22

注意:這是redo-only不寫

9.復制文件:

[root@localhost mydata]# innobackupex –copy-back /mydata/2016-11-19_15-19-55/

10.導入二進制sql語句

MariaDB [hellodb]> \. /mydata/binlog.sql

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Mysql復制:

1.主/從架構:

           異步復制:

           半同步復制:

           一主多從;

           一從一主;

           級聯復制;

           循環復制;

           雙主復制;

1.1配置在主服務器上

      1.同步時間

[root@localhost mydata]# ntpdate 10.1.0.1

      2. 修改mysql配置文件

[root@centos7clean ~]# vim /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

symbolic-links=0

server_id=1

log_bin=master-log

mysql主從復制及zabbix監控從服務器

      mysql主從復制及zabbix監控從服務器

mysql主從復制及zabbix監控從服務器

3.配置一個從服務器的授權

MariaDB [(none)]> grant replication slave,replication client on *.* to 'user'@'10.1.72.50' identified by '123';

Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;

Query OK, 0 rows affected (0.00 sec)

 

 

 

1.2在從服務器上

[root@localhost mydata]# !vim

vim /etc/my.cnf

[mysqld]

socket=/var/lib/mysql/mysql.sock

datadir=/var/lib/mysql

symbolic-links=0

innodb_log_file_size = 50331648

server_id=2

relay_log=slave-log

innodb_file_per_table=on

啟動服務

指明主服務器:

MariaDB [(none)]> change master to master_host='10.1.72.60',master_user='user',master_password='123',master_log_file='master-log.000009',master_log_pos=245;

查看從服務器狀態

mysql主從復制及zabbix監控從服務器

開啟從服務器

MariaDB [(none)]> change master to master_host='10.1.72.60',master_user='user',master_password='123',master_log_file='master-log.000009',master_log_pos=245;

MariaDB [(none)]>start slave;

驗證:

mysql主從復制及zabbix監控從服務器

mysql主從復制及zabbix監控從服務器

設置從服務器為只讀

MariaDB [hellodb]> set @@global.read_only=1;

mysql主從復制及zabbix監控從服務器

 

2、主主模式

互為主從:兩個節點各自都要開啟binlog和relay log;

           1、數據不一致;

           2、自動增長id;

                 定義一個節點使用奇數id

                      auto_increment_offset=1

                      auto_increment_increment=2

 

                 另一個節點使用偶數id

                      auto_increment_offset=2

                      auto_increment_increment=2

節點1:

[root@centos7clean ~]# vim /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

server_id=1

log_bin=master-log

relay_log=relay-log

auto_increment_offset=1

auto_increment_increment=2

授權

MariaDB [(none)]> grant replication slave,replication client on *.* to 'user'@'10.1.72.50' identified by '123';

Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;

指向另一個節點為主:

MariaDB [(none)]> change master to master_host='10.1.72.50',master_user='user',master_password='123',master_log_file='master-log.000003',master_log_pos=245;

MariaDB [(none)]> start slave;

 

節點2:

[root@centos ~]# vim /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

server_id=1

log_bin=master-log

relay_log=relay-log

auto_increment_offset=2

auto_increment_increment=2

授權:

MariaDB [(none)]> grant replication slave,replication client on *.* to 'user'@'10.1.72.60' identified by '123';

Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;

指向另一臺為主:

MariaDB [(none)]> change master to master_host='10.1.72.60',master_user='user',master_password='123',master_log_file='master-log.000003',master_log_pos=245;

MariaDB [(none)]> start slave;

 

復制時應該注意的問題:                    

      1、盡量確保復制時的事務安全

           在master節點啟用參數:

                 sync_binlog = ON

                 立刻將二進制日志寫入磁盤中

           如果用到的是InnoDB存儲引擎:

                 innodb_flush_logs_at_trx_commit=ON將事務日志寫入磁盤

                 innodb_support_xa=ON支持分布式事務

      2、從服務器意外中止時盡量避免自動啟動復制線程

                     

      3、從節點:設置參數

           sync_master_info=ON

           sync_relay_log_info=ON

聲明:最好不要使用主主模式

 

3、半同步復制

      支持多種插件:/usr/lib64/mysql/plugins/

主節點:

[root@centos7clean ~]# vim /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

server_id=1

log_bin=master-log

[root@centos7clean ~]# systemctl start mariadb

[root@centos7clean ~]# mysql

MariaDB [(none)]> grant replication slave,replication client on *.* to 'user'@'10.1.72.%' identified by '123';

MariaDB [(none)]> flush privileges;

安裝插件

MariaDB [(none)]> install plugin rpl_semi_sync_master soname 'semisync_master.so';

MariaDB [(none)]> show plugins;

mysql主從復制及zabbix監控從服務器

MariaDB [(none)]> show global variables like 'rpl_semi%';

mysql主從復制及zabbix監控從服務器

開啟半同步復制

MariaDB [(none)]> set @@global.rpl_semi_sync_master_enabled=on;

查看是否有從節點:

MariaDB [(none)]> show global status like '%semi%';

mysql主從復制及zabbix監控從服務器

mysql主從復制及zabbix監控從服務器

 

從節點:

[root@localhost mydata]# vim /etc/my.cnf

[mysqld]

socket=/var/lib/mysql/mysql.sock

server_id=2

relay_log=slave-log

[root@localhost mydata]# systemctl start mariadb

[root@localhost mydata]# mysql

MariaDB [(none)]> change master to master_host='10.1.72.60' ,master_user='user',master_password='123',master_log_file='master-log.000003',master_log_pos=486;

MariaDB [(none)]> start slave;

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

安裝插件

MariaDB [(none)]> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

mysql主從復制及zabbix監控從服務器

啟動服務

MariaDB [(none)]> set @@global.rpl_semi_sync_slave_enabled = on;

停止服務

Stop slave;

開啟服務

Start slave;

 

復制過濾器:

      僅復制有限一個或幾個數據庫相關的數據,而非所有;由復制過濾器進行;

      有兩種實現思路:

           (1) 主服務器

                 主服務器僅向二進制日志中記錄有關特定數據庫相關的寫操作;

                 問題:其它庫的point-recovery將無從實現;

                      binlog_do_db=白名單,復制哪個數據庫

                      binlog_ignore_db=黑名單,忽略哪個數據庫

           (2) 從服務器

                 從服務器的SQL THREAD僅重放關注的數據庫或表相關的事件,并將其應用于本地;問題:網絡IO和磁盤IO;

                 Replicate_Do_DB=

                 Replicate_Ignore_DB=

                 Replicate_Do_Table=

                 Replicate_Ignore_Table=

                 Replicate_Wild_Do_Table=

                 Replicate_Wild_Ignore_Table=    

將這些參數寫入到配置文件中即可;

半同步復制哪些參數想重啟生效,也要寫入到配置文件中

復制的監控和維護:

      (1) 清理日志:PURGE

           PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr };

示例:

MariaDB [(none)]> purge binary logs to 'master-log.000003';

表示mysql-bin.03之前的所有日志都被清理;

MariaDB [(none)]> PURGE BINARY LOGS BEFORE '2008-04-02 22:46:26' ;表示2008-04-02 22:46:26這個時間點之前的所有事件都被清理;

      (2) 復制監控

            MASTER:

                 SHOW MASTER STATUS;

                 SHOW BINLOG EVENTS;

                 SHOW BINARY LOGS;

           SLAVE:

                 SHOW SLAVE STATUS;

           判斷從服務器是否落后于主服務器:

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

mysql主從復制及zabbix監控從服務器             Seconds_Behind_Master: 0

      (3) 如何確定主從節點數據是否一致?

           通過表的CHECKSUM檢查;

           使用percona-tools中pt-table-checksum;

      (4) 主人數據不一致時的修復方法?

           重新復制;

 

 

 

 

 

 

 

 

 

 

 

綜合實驗:

主節點:

創建CA證書

[root@centos7clean CA]# (umask 077;openssl genrsa -out private/cakey.pem)

[root@centos7clean CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem

[root@centos7clean mysql]# cd ssl/

[root@centos7clean ssl]# (umask 077;openssl genrsa -out mysql.key)

[root@centos7clean ssl]# openssl req -new -key mysql.key -out mysql.csr

[root@centos7clean ssl]# openssl ca -in mysql.csr -out mysql.crt

vim /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

server_id=1

log_bin=master-log

innodb_file_per_table = on

ssl

ssl_ca = /etc/pki/CA/cacert.pem

ssl_cert = /var/lib/mysql/ssl/mysql.crt

ssl_key = /var/lib/mysql/ssl/mysql.key

改變屬主屬組

[root@centos7clean ssl]# chown -R mysql.mysql *

mysql主從復制及zabbix監控從服務器

MariaDB [(none)]> show variables like '%ssl%';

mysql主從復制及zabbix監控從服務器

 

從節點:

[root@localhost ssl]# (umask 066;openssl genrsa -out mysql.key)

[root@localhost ssl]# openssl req -new -key mysql.key -out mysql.csr

[root@localhost ssl]# ls

mysql.csr  mysql.key

[root@localhost ssl]# scp mysql.csr 10.1.72.60:/root

 

 

 

主節點簽署并發還從節點,更改屬主屬組

[root@localhost ssl]# chown mysql.mysql *

[root@localhost ssl]# ll

total 8

-rw-r–r– 1 mysql mysql   0 Nov 20 10:46 mysql.crt

-rw-r–r– 1 mysql mysql 643 Nov 20 10:37 mysql.csr

-rw——- 1 mysql mysql 887 Nov 20 10:37 mysql.key

將證書的公鑰cacert.pem復制到從服務器的目錄下

mysql主從復制及zabbix監控從服務器

更改從節點配置文件:

[root@localhost ssl]# vim /etc/my.cnf

[mysqld]

socket=/var/lib/mysql/mysql.sock

datadir=/var/lib/mysql

symbolic-links=0

innodb_log_file_size = 50331648

server_id=2

ssl

ssl_ca=/etc/pki/CA/cacert.pem

ssl_cert=/var/lib/mysq/ssl/mysql.crt

ssl_key=/var/lib/mysql/ssl/mysql.key

relay_log=slave-log

啟動服務,主節點授權

MariaDB [(none)]> grant replication slave,replication client on *.* to 'user'@'10.1.72.50' identified by '123' require ssl;

MariaDB [(none)]> flush privileges;

 

 

備份主節點數據到從節點:

主:

備份數據

[root@centos7clean ~]# innobackupex –user='root' –password= /mydata

 

 

 

從:

停止服務,還原數據:

[root@localhost mysql]# innobackupex –apple-log /mydata/2016-11-20_11-13-51/

[root@localhost mysql]# rm -rf *

[root@localhost mysql]# innobackupex –copy-back /mydata/2016-11-20_11-13-51/

注意:恢復數據的時候是基于unix套接字的,所以要先創建mysql.sock

啟動服務,并指明主服務器

MariaDB [(none)]> change master to master_host='10.1.72.60',master_user='user',master_password='123',master_log_file='master-log.000011',master_log_pos=499,master_ssl=1,master_ssl_ca='/etc/pki/CA/cacert.pem',master_ssl_key='/var/lib/mysql/ssl/mysql.key',master_ssl_cert='/var/lib/mysql/ssl/mysql.crt';

mysql主從復制及zabbix監控從服務器

Query OK, 0 rows affected (0.05 sec)

可以用[root@localhost ssl]# mysql –ssl -uuser -h10.1.72.60 -p123測試

 

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

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

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 10.1.72.60

                  Master_User: user

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: master-log.000012

          Read_Master_Log_Pos: 245

               Relay_Log_File: slave-log.000007

                Relay_Log_Pos: 530

        Relay_Master_Log_File: master-log.000012

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

              Replicate_Do_DB:

          Replicate_Ignore_DB:

           Replicate_Do_Table:

       Replicate_Ignore_Table:

      Replicate_Wild_Do_Table:

  Replicate_Wild_Ignore_Table:

                   Last_Errno: 0

                   Last_Error:

                 Skip_Counter: 0

          Exec_Master_Log_Pos: 245

              Relay_Log_Space: 1357

              Until_Condition: None

               Until_Log_File:

                Until_Log_Pos: 0

           Master_SSL_Allowed: Yes

           Master_SSL_CA_File: /etc/pki/CA/cacert.pem

           Master_SSL_CA_Path:

              Master_SSL_Cert: /var/lib/mysql/ssl/mysql.crt

            Master_SSL_Cipher:

               Master_SSL_Key: /var/lib/mysql/ssl/mysql.key

        Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

                Last_IO_Errno: 0

                Last_IO_Error:

               Last_SQL_Errno: 0

               Last_SQL_Error:

  Replicate_Ignore_Server_Ids:

             Master_Server_Id: 1

1 row in set (0.00 sec)

 

 

 

 

 

實驗:使用zabbix監控從服務器 

實驗要求:
·
監控過濾Seconds_Behind_Master: 0,如果不等于0,則表示從服務器落后于主服務器,則發送警報并執行操作,在從服務器上執行命令:(mysql  -e “stop slave io_thread;start slave io_thread”)

mysql主從復制及zabbix監控從服務器

10.1.72.40:安裝zabbix

[root@localhost ~]#yum -y install ./zabbix-get-3.0.2-1.el7.x86_64.rpm ./zabbix-server-mysql-3.0.2-1.el7.x86_64.rpm ./zabbix-web-3.0.2-1.el7.noarch.rpm ./zabbix-web-mysql-3.0.2-1.el7.noarch.rpm

[root@localhost ~]#yum -y install php httpd php-mysql mariadb-server

[root@localhost ~]#vim /etc/zabbix/zabbix_server.conf

DBName=zabbix

DBUser=zabbix

DBPassword=123

Agent端安轉并啟動服務,配置自定義key

[root@localhost mysql]# vim /etc/zabbix/zabbix_agentd.conf

# UserParameter=

 UserParameter=Seconds_Behind_Master,mysql -uroot -hlocalhost  -e 'show slave status\G;'|awk -F':' '/Seconds/ {print $2}'

 

 

添加主機,并建立一個item

mysql主從復制及zabbix監控從服務器

mysql主從復制及zabbix監控從服務器

mysql主從復制及zabbix監控從服務器

 

關聯一個賬戶

mysql主從復制及zabbix監控從服務器

定義動作:

mysql主從復制及zabbix監控從服務器

mysql主從復制及zabbix監控從服務器

 

 

測試:

從服務器添加一個讀鎖

MariaDB [(none)]> flush tables with read lock;

主服務器做操作

mysql主從復制及zabbix監控從服務器

mysql主從復制及zabbix監控從服務器

 

 

原創文章,作者:landanhero,如若轉載,請注明出處:http://www.www58058.com/60147

(0)
landanherolandanhero
上一篇 2016-12-05
下一篇 2016-12-05

相關推薦

  • TCP/IP

    TCP/IP協議族     互聯網協議族(英語:Internet Protocol Suite,縮寫IPS)是一個網絡通信模型,以及一整個網絡傳輸協議家族,為互聯網的基礎通信架構。它常被通稱為TCP/IP協議族(英語:TCP/IP Protocol Suite,或TCP/IP Protocols),簡稱TCP/IP。因為該協議家…

    Linux干貨 2017-06-26
  • Linux命令的使用格式以及命令幫助信息的獲取方式

    1.Linux系統上的命令使用格式 2.Linux系統程序文件存放位置 3.Linux獲取命令的幫助信息 區分內部命令和外部命令 內部命令在系統啟動時就調入內存,是常駐內存的,所以執行效率高。 外部命令是系統的軟件功能,用戶需要時才從硬盤中讀入內存。 #type COMMAND 內部命令獲取幫助信息:#help COMMAND 外部命令獲取幫助信息…

    Linux干貨 2016-10-29
  • dd工具

    dd     dd命令:convert and copy a file     用法:        ddif=/PATH/FROM/SRC of=/PATH/TO/DEST       &…

    Linux干貨 2016-09-02
  • 優云Monitor:大規模Docker平臺自動化監控之路

    本文介紹了通過優云Monitor,如何實現大規模容器運維平臺的自動化監控需求。 盡管Docker技術目前還處于不穩定的發展與標準制定階段,但這門技術已經呈現了極其火熱的增長狀態,卻已經是不爭的實事。到底有多火熱?讓我們先來看一張來自國外監控公司DataDog 2016年最新調查報告: 從圖中可以看出,自2015年5月后,采用容器技術的應用呈現了30%的大幅增…

    2016-08-05
  • 20160804正則表達式作業

    正則表達式表示18位身份證號 正則表達式表示手機號 正則表達式表示郵箱 ?  截取出ifconfig命令結果中所有的本機的ipv4地址   ?  查看分區中使用率最大的百分比 ?  查看UID最大的用戶名、UID以及shell類型 ?  查看/tmp權限,并且以數字方式顯示 思路:先找到如何才能查看到/tmp…

    Linux干貨 2016-08-08
  • AWK小記

    gawk – pattern scanning and processing language 基本用法:gawk [options] ‘program’ FILE … program: PATTERN{ACTION STATEMENTS} 語句之間用分號分隔 print, printf 選項: -F:指明輸入…

    2018-01-16
欧美性久久久久