學習MySql(一)
阿新 • • 發佈:2020-10-26
一、安裝部署mysql
1、安裝mysql:
# yum -y install autoconf libaio libaio-devel # groupadd mysql # useradd -r -g mysql -s /sbin/nologin mysql # wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz #下載編譯完成的包,效能更可靠 # tar -zxvf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz # mv mysql-5.6.36-linux-glibc2.5-x86_64 /usr/local/mysql-5.6.36 # ln -s /usr/local/mysql-5.6.36 /usr/local/mysql # chown -R mysql:mysql /usr/local/mysql-5.6.36/
2、建立配置檔案:
# vim /data/3306/my.cnf
[client] port = 3306 socket = /data/3306/mysql.sock [mysql] no-auto-rehash [mysqld] user = mysql port= 3306 socket = /data/3306/mysql.sock basedir = /usr/local/mysql datadir = /data/3306/data tmpdir = /tmp open_files_limit = 65535 character-set-server = utf8mb4 back_log = 500 max_connections = 3000 max_connect_errors = 10000 #table_cache = 6144 max_allowed_packet =8M sort_buffer_size = 1M join_buffer_size= 1M thread_cache_size = 100 thread_concurrency = 2 query_cache_size = 64M query_cache_type = 1 #default_table_type = InnoDB #transaction_isolation = READ-COMMITTED tmp_table_size = 512M max_heap_table_size = 256M table_open_cache = 512 log_error=/data/3306/mysql_3306.err slow_query_log_file = /data/3306/mysql-slow.log slow_query_log = 1 long_query_time =0.5 pid-file = /data/3306/mysql.pid log-bin = /data/3306/mysql-bin relay-log = /data/3306/relay-bin relay-log-info-file = /data/3306/relay-log.info binlog_cache_size = 2M binlog_format = row log-slave-updates max_binlog_cache_size = 4M max_binlog_size = 256M expire_logs_days = 7 #myisam_sort_buffer_size = 1M #myisam_max_sort_file_size = 10G #myisam_max_extra_sort_file_size = 10G #myisam_repair_threads = 1 #myisam_recover skip-name-resolve skip-host-cache replicate-ignore-db = mysql server-id = 71 innodb_additional_mem_pool_size = 8M innodb_buffer_pool_size = 16G #設定成記憶體的60-70%最好 innodb_data_file_path = ibdata1:128M;ibdata2:128M:autoextend innodb_flush_method = O_DIRECT innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 4M innodb_log_file_size = 2G innodb_log_files_in_group = 3 innodb_file_per_table = 1 [mysqldump] quick max_allowed_packet = 8M
3、初始化資料庫:
# chown mysql.mysql -R /data/3306/ # cd /usr/local/mysql/scripts/ # ./mysql_install_db \ --defaults-file=/data/3306/my.cnf \ --basedir=/usr/local/mysql/ \ --datadir=/data/3306/data/ --user=mysql #新增環境變數 # echo 'export PATH=/usr/local/mysql/bin/:$PATH' >> /etc/profile # source /etc/profile
4、啟動資料庫:
# /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf &
5、設定資料庫密碼:
mysqladmin -uroot password Root123 -S /data/3306/mysql.sock
6、建立資料庫啟動指令碼:
#!/bin/sh port=3306 mysql_user="root" mysql_pwd="Root123" cmdpath="/usr/local/mysql/bin" mysql_sock="/data/${port}/mysql.sock" #start function function_start_mysql() { if [ ! -e "$mysql_sock" ];then echo "starting mysql…" /bin/sh ${cmdpath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /devull & else echo "mysql is running…" exit fi } #stop function function_stop_mysql() { if [ ! -e "$mysql_sock" ];then echo "mysql is stopped…" else echo "stoping mysql…" ${cmdpath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown fi } #restart function function_restart_mysql() { echo "restarting mysql…" function_stop_mysql sleep 2 function_start_mysql } case $1 in start) function_start_mysql ;; stop) function_stop_mysql ;; restart) function_restart_mysql ;; *) echo "usage: /data/${port}/mysql {start|stop|restart}" esac
二、mysql的備份恢復
1、Xtrabackup介紹
MySQL冷備:mysqldump,熱備:xtrabakackup有2個工具,分別是xtrabakup、innobakupe,支援MySQL、Percona server和MariaDB。
xtrabackup只能備份innoDB和xtraDB兩種資料引擎的表,而不能備份MyISAM資料表。
2、Xtrabackup優點
1 備份速度快,物理備份可靠 2 備份過程不會打斷正在執行的事務(無需鎖表) 3 能夠基於壓縮等功能節約磁碟空間和流量 4 自動備份校驗 5 還原速度快 6 可以流傳將備份傳輸到另外一臺機器上 7 在不增加伺服器負載的情況備份資料
3、Xtrabackup備份原理
Xtrabackup備份流程圖:
1 innobackupex啟動後,會先fork一個程序,用於啟動xtrabackup,然後等待xtrabackup備份ibd資料檔案; 2 xtrabackup在備份innoDB資料是,有2種執行緒:redo拷貝執行緒和ibd資料拷貝執行緒。xtrabackup程序開始執行後,會啟動一個redo拷貝的執行緒,用於從最新的checkpoint點開始順序拷貝redo.log;再啟動ibd資料拷貝執行緒,進行拷貝ibd資料。這裡是先啟動redo拷貝執行緒的。在此階段,innobackupex進行處於等待狀態(等待檔案被建立) 3 xtrabackup拷貝完成ibd資料檔案後,會通知innobackupex(通過建立檔案),同時xtrabackup進入等待狀態(redo執行緒依舊在拷貝redo.log) 4 innobackupex收到xtrabackup通知後哦,執行FLUSH TABLES WITH READ LOCK(FTWRL),取得一致性位點,然後開始備份非InnoDB檔案(如frm、MYD、MYI、CSV、opt、par等格式的檔案),在拷貝非InnoDB檔案的過程當中,資料庫處於全域性只讀狀態。 5 當innobackup拷貝完所有的非InnoDB檔案後,會通知xtrabackup,通知完成後,進入等待狀態; 6 xtrabackup收到innobackupex備份完成的通知後,會停止redo拷貝執行緒,然後通知innobackupex,redo.log檔案拷貝完成; 7 innobackupex收到redo.log備份完成後,就進行解鎖操作,執行:UNLOCK TABLES; 8 最後innbackupex和xtrabackup程序各自釋放資源,寫備份元資料資訊等,innobackupex等xtrabackup子程序結束後退出。
4、xtrabackup的安裝部署
1) xtrabackup的yum安裝
1、yum安裝
下載地址:https://www.percona.com/downloads/XtraBackup/LATEST/
# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm # yum install -y percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
2)xtrabackup的二進位制安裝
這種安裝方法也很簡單,不象rpm包需要安裝依賴包,只需解壓安裝檔案,為了方便可建立軟連線。 1、檢查libgcrypt的版本: # rpm -aq | grep libgcrypt
2、下載XtraBackup # wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.12/binary/tarball/percona-xtrabackup-2.4.12-Linux-x86_64.libgcrypt145.tar.gz 3、解壓縮檔案 # tar xf percona-xtrabackup-2.4.12-Linux-x86_64.libgcrypt145.tar.gz # mv percona-xtrabackup-2.4.12-Linux-x86_64 /home/tom/xtr # ln -s /home/tom/xtr/bin/* /home/tom/bin/
5、Xtrabackup工具介紹
1、引數選項 xtrabackup:是用於熱備innodb,xtradb表中資料的工具,不能備份其他型別的表,也不能備份資料表結構; innobackupex:是將xtrabackup進行封裝的perl指令碼,提供了備份myisam表的能力。 常用選項: --host #指定主機 --user #指定使用者名稱 --password #指定密碼 --port #指定埠 --databases #指定資料庫 --incremental #建立增量備份 --incremental-basedir #指定包含完全備份的目錄 --incremental-dir #指定包含增量備份的目錄 --apply-log #對備份進行預處理操作(備份後的資料,含有未提交的事務,通過回滾,保證資料一致性) --redo-only #不回滾未提交事務 --copy-back #恢復備份目錄 --no-timestamp #不建立以時間命名的目錄(預設以時間命名) 2、innobackupex檔案介紹 使用innobackupex備份時,會呼叫xtrabackup備份所有的InnoDB表,複製所有關於表結構定義的相關檔案(.frm)、 以及MyISAM、MERGE、CSV和ARCHIVE表的相關檔案,同時還會備份觸發器和資料庫配置資訊相關的檔案 1)xtrabackup_checkpoints 備份型別(完全或增量)、備份狀態(是否已為prepared狀態)和LSN(日誌序列號)範圍資訊 每個InnoDB頁(通常為16k大小)都會包含一個日誌序列號,即LSN,LSN是整個資料庫系統的系統版本號 2)xtrabackup_binlog_info 二進位制日誌檔案及位置點 3)xtrabackup_binlog_pos_innodb 二進位制日誌檔案及用於InnoDB或XtraDB表的二進位制日誌檔案的當前position 4)xtrabackup_binary 備份中用到的xtrabackup的可執行檔案 5)backup-my.cnf 備份命令用到的配置選項資訊
6、建立一個最小許可權的備份使用者
mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY '123456'; mysql> REVOKE ALL PRIVILEGES,GRANT OPTION FROM 'bkpuser'; mysql> GRANT RELOAD,LOCK TABLES,RELICATION CLIENT ON *.* TO 'bkpuser'@'localhost'; mysql> FLUSH PRIVILEGES;
7、xtrabackup全量備份與恢復
備份: # innobackupex --user=bkpuser --password=123456 --defaults-file=/etc/my.cnf /BACKUP-DIR/ # innobackupex -uroot -p123456 -H127.0.0.1 --stream=tar /tmp >/home/tom/all.tar #非壓縮方式 # innobackupex -uroot -p123456 -H127.0.0.1 --stream=tar /tmp | gzip >/home/tom/all.tar.gz #壓縮方式 恢復: # innobackupex --apply-log /backups/2018-07-30_11-04-55/ # innobackupex --copy-back --defaults-file=/etc/my.cnf /backups/2018-07-30_11-04-55/ # innobackupex --move-back --defaults-file=/etc/my.cnf /backups/2018-07-30_11-04-55/ 備份到遠端 # innobackupex -uroot -p123456 -H127.0.0.1 --stream=tar /tmp | sshpass -p '123456' ssh root@IP "cat - > /root/all.tar" #非壓縮方式 # innobackupex -uroot -p123456 -H127.0.0.1 --stream=tar /tmp | sshpass -p '123456' ssh root@IP "gzip > /root/all.tar" #壓縮方式 注意:解壓時tar +i引數, tar -xizf all.tar.gz
8、全量備份與恢復示例
1) 全量備份 # innobackupex --user=root --password=123456 --host=127.0.0.1 /backups/
# ll 2018-07-30_11-01-37/ -rw-r----- 1 root root 418 Jul 30 11:01 backup-my.cnf #備份用到的配置選項資訊檔案 -rw-r----- 1 root root 79691776 Jul 30 11:01 ibdata1 #資料檔案
-rw-r----- 1 root root 21 Jul 30 11:01 xtrabackup_binlog_info #mysql伺服器當前正在使用的二進位制日誌檔案及位置點 -rw-r----- 1 root root 113 Jul 30 11:01 xtrabackup_checkpoints #備份的型別、狀態和LSN狀態資訊檔案 -rw-r----- 1 root root 482 Jul 30 11:01 xtrabackup_info -rw-r----- 1 root root 2560 Jul 30 11:01 xtrabackup_logfile #備份的日誌檔案 2) 恢復 # /etc/init.d/mysqld stop # yum install -y percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm # scp -r 2018-07-30_11-01-37/ root@192.168.56.12:/backups/ # innobackupex --apply-log /backups/2018-07-30_11-01-37/ #合併資料,使資料檔案處於一致性的狀態# rm -rf /usr/local/mysql/data/ #在slave上刪除原有的資料# innobackupex --copy-back /backups/2018-07-30_11-01-37/ #在slave上資料恢復
# chown -R mysql.mysql /usr/local/mysql/data/ # /etc/init.d/mysqld start # mysql -uroot -p -e "show databases;"
注意:備份時需啟動MySQL,恢復時需關閉MySQL,清空mysql資料目錄,且不能重新初始化
9、xtrabackup增量備份與恢復
1、增量備份(基於全量備份) # innobackupex --user=root --password=root --defaults-file=/etc/my.cnf --incremental /backups/ --incremental-basedir=/backups/2018-07-30_11-01-37
2、合併全備資料 # innobackupex --user=root --password=root --defaults-file=/etc/my.cnf --apply-log --redo-only /backups/2018-07-30_11-01-37
3、合併增量資料 # innobackupex --user=root --password=root --defaults-file=/etc/my.cnf --apply-log --redo-only /backups/2018-07-30_11-01-37 --incremental-dir=/backups/2018-07-30_13-51-47/
4、 恢復 # innobackupex --copy-back --defaults-file=/etc/my.cnf /opt/2017-01-05_11-04-55/
5、備註: 1) 2018-07-30_11-01-37 是全備的目錄。
2) 2018-07-30_13-51-47 是增量備份的目錄,如果有多次增量備份,每一次都要執行如上操作
10、增量備份與恢復例項
1、全備 # innobackupex --user=root --password=123456 --host=127.0.0.1 /backups/ 2、增量備份 # innobackupex --user=root --password=123456 --host=127.0.0.1 --incremental /backups/ --incremental-basedir=/backups/2018-07-30_11-01-37/ 3、檢視檔案 drwxr-x--- 7 root root 232 Jul 30 11:01 2018-07-30_11-01-37 #全量備份資料目錄 drwxr-x--- 8 root root 273 Jul 30 13:51 2018-07-30_13-51-47 #增量備份資料目錄 # cat xtrabackup_checkpoints backup_type = full-backuped #備份型別為全量備份 from_lsn = 0 #lsn從0開始 to_lsn = 3127097 #lsn到3127097結束 last_lsn = 3127097 # cat xtrabackup_checkpoints backup_type = incremental #備份型別為增量備份 from_lsn = 3127097 #lsn從3127097開始 to_lsn = 3158741 #lsn到啊3158741結束 last_lsn = 3158741 4、模擬故障,刪除資料目錄所有資料 # /etc/init.d/mysqld stop # rm -rf /usr/local/mysql/data/* 5、合併全備 # innobackupex --apply-log --redo-only /backups/2018-07-30_11-01-37/ 6、合併增量,確保資料的一致性 # innobackupex --apply-log --redo-only /backups/2018-07-30_11-01-37/ --incremental-dir=/backups/2018-07-30_13-51-47/ # cat /backups/2018-07-30_11-01-37/xtrabackup_checkpoints backup_type = log-applied #檢視到資料備份型別是增加 from_lsn = 0 to_lsn = 3158741 last_lsn = 3158741 7、恢復資料 # innobackupex --copy-back /backups/2018-07-30_11-01-37/ # chown -R mysql.mysql /usr/local/mysql/data # /etc/init.d/mysqld start # mysql -uroot -p -e "show databases;"
三、mysql主從同步
##################################################
1.環境準備
[root@db01 ~]# hostname ;hostname -I
db01
10.0.0.51 172.16.1.51
[root@db02 ~]# hostname ;hostname -I
db02
10.0.0.52 172.16.1.52
#兩臺伺服器均安裝以下軟體包。
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.7/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.7-1.el6.x86_64.rpm
yum -y localinstall percona-xtrabackup-24-2.4.7-1.el6.x86_64.rpm
-- 建立測試環境
create database oldboy;
use oldboy
drop table test;
CREATE TABLE test (
id int(4) NOT NULL AUTO_INCREMENT,
name char(20) NOT NULL,
PRIMARY KEY (id)
) ;
insert into test(id,name) values(1,'oldboy');
insert into test(name) values('oldgirl');
insert into test values(3,'inca');
insert into test values(4,'zuma'),(5,'kaka');
這裡db01為主庫,db02為從庫,從庫裡沒有資料。現在要實現的是db01到db02的主從複製。server id不能相同,同時開啟binlog功能
2. 備份
先在db01上做一次全備
[root@db01 ~]# innobackupex --defaults-file="/etc/my.cnf" --user=root --socket=/application/mysql/tmp/mysql.sock --password=123456 /opt/
#現在資料已經備份到opt下面了
#把備份好的資料複製到db02的opt目錄下
[root@db01 ~]# scp -r /opt/2017-05-05_11-23-50/ 10.0.0.52:/opt/
3.db01插入資料
在做完備份後,在生產環境中一般都會有資料繼續寫入資料庫,所以這裡再插入幾條資料模擬環境。
use oldboy;
insert into test(id,name) values(6,'bing');
insert into test(id,name) values(7,'zhao');
insert into test(id,name) values(8,'ya');
insert into test(id,name) values(9,'ting');
4.預處理
[root@db02 ~]# sed -i '16a datadir = /application/mysql/data' /application/mysql/my.cnf
[root@db02 opt]# innobackupex --defaults-file="/etc/my.cnf" --user=root --socket=/application/mysql/tmp/mysql.sock --password=123456 --apply-log --use-memory=200M /opt/2017-05-05_09-35-07/
#注:--use-memory引數可以設定適用記憶體進行處理,如果伺服器記憶體夠大,多給一點是沒問題的,可以加快處理速度。
5.db02
#刪除原有的資料檔案,必須先清空原有資料檔案,不然後報錯
[root@db02 mysql]# mv /application/mysql/data /tmp/
#匯入db01的資料檔案
[root@db02 mysql]# innobackupex --defaults-file="/etc/my.cnf" --user=root --socket=/application/mysql/tmp/mysql.sock --move-back /opt/2017-05-05_11-23-50/
#可以看到剛才被刪除的資料又恢復過來了
[root@db02 data]# cat xtrabackup_binlog_pos_innodb
mysql-bin.000002 1461
[root@db02 mysql]# chown -R mysql.mysql data
[root@db02 mysql]# /etc/init.d/mysqld start
6.建立主從同步授權使用者
-- 在db01上
mysql> grant replication slave on *.* to rep@'10.0.0.%' identified by '123456';
7.做主從同步
-- db02
mysql> change master to master_host='10.0.0.51',master_user='rep',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=1461;
mysql> start slave;
#檢查
[root@db02 mysql]# mysql -uroot -poldboy123 -e "show slave status\G"|egrep -i "Yes|Behind_Master"
Warning: Using a password on the command line interface can be insecure.
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
8.檢查資料
9.延時複製
mysql自帶還有延時複製的功能,比如在一主4從的時候,可以將其中一臺做延時複製,假如出現意外情況或誤操作,延時複製的功能還有一絲恢復資料的機會。
mysql> change master to master_delay = 3600; -- 等於你想要延遲的時間
mysql> start slave;
-- 表示從庫延遲1小時後同步資料
mysql> show slave status\G
SQL_Delay: 3600
SQL_Remaining_Delay: 3561
###################################################
1.主從複製
主庫:
1)修改配置檔案
#編輯mysql配置檔案my.cnf
[mysqld] server-id=1 #不能用從庫相同 log_bin=mysql-bin #開啟日誌
2)建立主從複製使用者
建立rep使用者
mysql> grant replication slave on *.* to rep@'10.0.0.%' identified by 'oldboy123';
3)檢視主庫binlog位置點
show master status;
從庫:
1)修改配置檔案
#修改db02配置檔案my.cnf
[mysqld] server-id=2
read_only=1
2)配置主從
mysql> change master to master_host='10.0.0.51',master_user='rep',master_password='oldboy123',master_auto_position=1;master_log_file='mysql-bin.000002',master_log_pos=1558;
mysql> start slave;
mysql> set global read_only=1; #從庫只讀
2、延時同步
企業中一般會延時3-6小時
1)延時從庫配置方法
#停止主從 #設定延時為180秒 mysql>CHANGE MASTER TO MASTER_DELAY = 180; #開啟主從 #檢視狀態 SQL_Delay: 60
總資料量級500G,正常備份去恢復需要1.5-2小時
2)怎麼利用延時從庫,恢復資料?
1、停止SQL執行緒 mysql> stop slave sql_thread; 2、擷取relaylog到誤刪除之前點 relay-log.info 獲取到上次執行到的位置點,作為恢復起點 分析relay-log的檔案內容,獲取到誤刪除之前position
模擬故障
1)從庫,關閉SQL執行緒 mysql > stop slave sql_thread; 2)擷取relay-log 起點: cat /data/3308/data/relay-log.info /db01-relay-bin.000002283 終點: mysql > show relaylog events in 'db01-relay-bin.000002' db01-relay-bin.000002 | 268047
3)匯出sql # mysqlbinlog --start-position=283 --stop-position=268047 /data/3308/data/db01-relay-bin.000002 >/tmp/relay.sql 4)恢復relay.sql mysql> set sql_log_bin=0; mysql> source /tmp/relay.sql mysql> show tables;
3、半同步複製
半同步複製開啟方法
1)主庫
#檢視是否有動態支援 mysql> show global variables like 'have_dynamic_loading';
#安裝自帶外掛 mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME'semisync_master.so'; #啟動外掛 mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1; #設定超時(毫秒) mysql> SET GLOBAL rpl_semi_sync_master_timeout = 1000; #修改配置檔案 my.cnf [mysqld] rpl_semi_sync_master_enabled=1 rpl_semi_sync_master_timeout=1000 檢查安裝: mysql> show variables like'rpl%'; mysql> show global status like 'rpl_semi%'
2)從庫
#安裝slave半同步外掛 mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME'semisync_slave.so'; #啟動外掛 mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1; #重啟io執行緒使其生效 mysql> stop slave io_thread; start slave io_thread; #編輯配置檔案 my.cnf [mysqld] rpl_semi_sync_slave_enabled =1
注:相關引數說明
rpl_semi_sync_master_timeout=milliseconds 設定此引數值(ms),為了防止半同步複製在沒有收到確認的情況下發生堵塞,如果Master在超時之前沒有收到任何確認,將恢復到正常的非同步複製,並繼續執行沒有半同步的複製操作。 rpl_semi_sync_master_wait_no_slave={ON|OFF} 如果一個事務被提交,但Master沒有任何Slave的連線,這時不可能將事務傳送到其它地方保護起來。預設情況下,Master會在時間限制範圍內繼續等待Slave的連線,並確認該事務已經被正確的寫到磁碟上。 可以使用此引數選項關閉這種行為,在這種情況下,如果沒有Slave連線,Master就會恢復到非同步複製。
3)測試半同步
#建立兩個資料庫,test1和test2 mysql> create database test1; mysql> create database test2; #檢視複製狀態 mysql> show global status like 'rpl_semi%';
#關閉半同步(1:開啟 0:關閉) mysql> SET GLOBAL rpl_semi_sync_master_enabled = 0; #檢視半同步狀態 mysql> show global status like 'rpl_semi%';
#再一次建立兩個庫 mysql> create database test3; mysql> create database test4; #再一次檢視半同步狀態 mysql> show global status like 'rpl_semi%';
注:不難發現,在查詢半同步狀態是,開啟半同步,查詢會有延遲時間,關閉之後則沒有
4、過濾複製
主庫:
白名單:只記錄白名單中列出的庫的二進位制日誌
- binlog-do-db
黑名單:不記錄黑名單列出的庫的二進位制日誌
- binlog-ignore-db
從庫:
白名單:只執行白名單中列出的庫或者表的中繼日誌
- --replicate-do-db=test
- --replicate-do-table=test.t1
- --replicate-wild-do-table=test.t2
黑名單:不執行黑名單中列出的庫或者表的中繼日誌
- --replicate-ignore-db
- --replicate-ignore-table
- --replicate-wild-ignore-table
7、使用percona-monitoring-plugins外掛監控mysql5.6
zabbix-agent端
1、zabbix-agent端(被監控的Mysql伺服器) 1) 安裝php環境 # yum install zabbix-agent php php-mysql 2) 安裝percona外掛 # rpm -ivh https://www.percona.com/downloads/percona-monitoring-plugins/percona-monitoring-plugins-1.1.7/binary/redhat/6/x86_64/percona-zabbix-templates-1.1.7-2.noarch.rpm 3) 配置引數 # mkdir -p /etc/zabbix/zabbix_agentd.d # cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/userparameter_percona_mysql.conf 4) 將模板include到配置檔案中 # vim /etc/zabbix/zabbix_agentd.conf Include=/etc/zabbix/zabbix_agentd.d/ 5) 重啟服務 service zabbix-agent restart 2、修改監控相關的指令碼(被監控的Mysql伺服器) 1) 新增監控使用者 mysql> GRANT PROCESS,SUPER,REPLICATION CLIENT ON *.* TO zabbix@'localhost' IDENTIFIED BY 'zabbixpassword'; mysql> flush privileges; 2) 編輯監控的php配置檔案 # vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php.cnf <?php $mysql_user = 'zabbix'; $mysql_pass = 'zabbixpassword'; 3) 編輯ss_get_mysql_stats.php檔案 # vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php $mysql_user = 'zabbix'; $mysql_pass = 'zabbixpassword'; $mysql_port = 3306; $mysql_socket = "/tmp/mysql.sock"; 3、在zabbix-agent客戶端測試(要能獲取資料,否則無法獲取監控資料) # /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh nj # /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gw
zabbix-server web端操作
1)匯入監控模板
2)修改日誌許可權
chown -R zabbix.zabbix /tmp/localhost-mysql_cacti_stats.txt
3)新增客戶端模板
4)通過服務端驗證是否生效,並檢視影象
# zabbix_get -s 192.168.3.12 -k MySQL.file-reads # zabbix_get -s 192.168.3.12 -k MySQL.os-waits
監控mysql主從
1、在slave的節點,修改slave上的監控指令碼 # vim /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh RES=`HOME=~zabbix mysql -h192.168.3.13 -uzabbix -pzabbixpassword -S /tmp/mysql.sock -e 'SHOW SLAVE STATUS\G' | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr '\n' ','` 2、監控主從同步 1) 監控主從同步狀態 UserParameter=MySQL.running-slave,/usr/local/zabbix_agents_3.2.0/scripts/get_mysql_stats_wrapper.sh running-slave 2) 主從延遲多少秒 UserParameter=MySQL.slave-lag,/usr/local/zabbix_agents_3.2.0/scripts/get_mysql_stats_wrapper.sh jj 3) 要注意php的路徑 CMD="/usr/local/php/bin/php -q $DIR/ss_get_mysql_stats.php --host $HOST --items gg" 4) 執行的時候發出警告,會報錯:不支援的key # /usr/local/zabbix_agents_3.2.0/scripts/get_mysql_stats_wrapper.sh running-slave # zabbix_get -s 1.1.1.1 -p 10050 -k 'MySQL.running-slave' 5) 解決辦法: RES=`HOME=/usr/local/zabbix_agents_3.2.0/scripts /usr/local/mysql/bin/mysql -S /tmp/mysql.sock -e 'SHOW SLAVE STATUS\G' | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr '\n' ','` 語句中接入HOME目錄,並且在該目錄下建立.my.cnf檔案,將賬戶密碼寫入這個檔案,mysql在連線資料庫的時候就會去讀取這個檔案,就繞過了不安全的提示 # cat /usr/local/zabbix_agents_3.2.0/scripts/.my.cnf [client] user=zabbix password=zabbix 3、測試報警 mysql> stop slave;