在現(xiàn)代企業(yè)中,數(shù)據(jù)顯得尤為重要,而存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)庫(kù)選擇又五花八門,但無(wú)論是何種數(shù)據(jù)庫(kù),均存在著一種隱患。
當(dāng)數(shù)據(jù)規(guī)模非常大,讀寫量也很高時(shí),一臺(tái)數(shù)據(jù)庫(kù)已經(jīng)無(wú)法負(fù)擔(dān)全部讀寫任務(wù),就需要多臺(tái)數(shù)據(jù)庫(kù)同時(shí)運(yùn)作分擔(dān)負(fù)載。
主從復(fù)制步驟:
互為主從時(shí),可能會(huì)由于循環(huán)寫導(dǎo)致數(shù)據(jù)失去一致性。
需求:
搭建兩臺(tái)MySQL服務(wù)器,一臺(tái)作為主服務(wù)器,一臺(tái)作為從服務(wù)器,主服務(wù)器進(jìn)行寫操作,從服務(wù)器進(jìn)行讀操作
環(huán)境:
主從復(fù)制配置步驟:
詳情請(qǐng)參考Mysql安裝
#以下操作在主庫(kù)進(jìn)行mysql> CREATE USER 'repl'@'192.168.233.247' IDENTIFIED BY 'repl123';Query OK, 0 rows affected (0.00 sec)mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.233.247';Query OK, 0 rows affected (0.00 sec)
#新開一個(gè)終端,對(duì)主庫(kù)鎖表,防止配置期間有其他人寫入,鎖表期間不能關(guān)閉終端或退出mysql交互式命令行mysql> FLUSH TABLES WITH READ LOCK;#全備主庫(kù)[root@lynk ~]# mysqldump -uroot -plynk123~ --all-databases > /opt/all-201902271419.sql#復(fù)制備份文件到從庫(kù)[root@lynk ~]# scp /opt/all-201902271419.sql root@192.168.233.247:/opt/#在從庫(kù)恢復(fù)主庫(kù)的備份[root@Hyrule ~]# mysql -uroot -plynk123~ < /opt/all-201902271419.sql
[root@lynk ~]# vim /etc/my.cnf#在[mysqld]后添加如下內(nèi)容(已有的內(nèi)容不要改變)datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sock#啟用binlog日志log-bin=mysql-bin#數(shù)據(jù)庫(kù)服務(wù)器唯一標(biāo)識(shí)符,主庫(kù)的server-id值必須比從庫(kù)的大server-id=1symbolic-links=0log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid #結(jié)束主庫(kù)鎖表狀態(tài),只要退出另一個(gè)終端中mysql交互式命令行就行了mysql> quit#重啟mysql服務(wù)[root@lynk ~]# systemctl restart mysqld#查看主庫(kù)狀態(tài)[root@lynk ~]# mysql -uroot -plynk123~ -e 'show master status;'mysql: [Warning] Using a password on the command line interface can be insecure.+------------------+----------+--------------+------------------+-------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+--------------+------------------+-------------------+| mysql-bin.000001 | 23912 | | | |+------------------+----------+--------------+------------------+-------------------+
[root@Hyrule ~]# vim /etc/my.cnf#添加如下內(nèi)容server-id=2relay-log=mysql-relay-bin#重啟從庫(kù)[root@Hyrule ~]# systemctl restart mysqld#配置主從復(fù)制mysql> CHANGE MASTER TO -> MASTER_HOST='192.168.233.129', -> MASTER_USER='repl', -> MASTER_PASSWORD='repl123', -> MASTER_LOG_FILE='mysql-bin.000001', -> MASTER_LOG_POS=23912;Query OK, 0 rows affected, 2 warnings (0.04 sec)mysql> start slave;Query OK, 0 rows affected (0.02 sec)mysql> show slave status \G#確保以下兩項(xiàng)是Yes Slave_IO_Running: Yes Slave_SQL_Running: Yes
#在主庫(kù)中新建一個(gè)庫(kù)或表,在從庫(kù)中查看是否有主庫(kù)中新建的表
zabbix可以滿足很多監(jiān)控需求,其自定義監(jiān)控尤其強(qiáng)大,主從監(jiān)控就是通過(guò)配置zabbix自定義監(jiān)控實(shí)現(xiàn)的。
請(qǐng)先部署zabbix,可以參考zabbix簡(jiǎn)介與部署
#在從庫(kù)添加一個(gè)mysql用戶密碼配置文件[root@Hyrule ~]# vim /root/.my.cnf[client]user=rootpassword=mysql登錄密碼[root@Hyrule ~]# chmod 755 /root
在客戶端進(jìn)行如下操作:
[root@localhost Hyrule]# vim /usr/local/etc/zabbix_agentd.conf#修改UnsafeUserParameters=1#在最后添加UserParameter=<key>,<shell command>,如UserParameter=check_delay,/scripts/mysql_delay.shUserParameter=check_status,/scripts/mysql_status.sh#重啟客戶端[root@Hyrule001 ~]# pkill zabbix[root@Hyrule001 ~]# zabbix_agentd#編寫監(jiān)控延遲的腳本[root@Hyrule ~]# mkdir /scripts[root@Hyrule ~]# vim /scripts/mysql_delay.sh#!/bin/bashmaster_log_pos=$(mysql -e 'show slave status \G;'|egrep "Read_Master_Log_Pos"|awk '{print $NF}')exec_log_pos=$(mysql -e 'show slave status \G;'|egrep "Exec_Master_Log_Pos"|awk '{print $NF}')echo "$[$master_log_pos-$exec_log_pos]"[root@Hyrule001 Hyrule]# chown zabbix.zabbix /scripts/mysql_delay.sh [root@Hyrule001 Hyrule]# chmod 777 /scripts/mysql_delay.sh
#編寫監(jiān)控運(yùn)行狀態(tài)的腳本[root@Hyrule ~]# vim /scripts/mysql_status.sh#!/bin/bashIO_status=$(mysql -e 'show slave status \G;'|egrep "Slave_IO_Running"|awk '{print $NF}'|grep "Yes"|wc -l)SQL_status=$(mysql -e 'show slave status \G;'|egrep "Slave_SQL_Running"|awk '{print $NF}'|grep "Yes"|wc -l)if [ $[$IO_status+$SQL_status] -eq 2 ];thenecho 0elseecho 1fi[root@Hyrule001 Hyrule]# chown zabbix.zabbix /scripts/mysql_status.sh [root@Hyrule001 Hyrule]# chmod 777 /scripts/mysql_status.sh
添加監(jiān)控項(xiàng)、觸發(fā)器和報(bào)警媒介
聯(lián)系客服