MySQL的備份、主從同步、高可用

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

#!/bin/bash
USER=root
PASSWORD=examp1e.net
BACKUPDIR=/backup

MYSQLDUMP_BACKUP() 
{
    mysqldump -u$USER -p$PASSWORD -A -F --single-transaction --master-data=2 | gzip > $BACKUPDIR/all-`date +%F`.sql.gz || {
    echo "Backup database by mysqldump failure";
    exit
    }
    echo "Complete the backup database by mysqldump"
}

XTRABACK_BACKUP()
{
    rpm -q percona-xtrabackup > /dev/null || {
        echo "Installing xtrabackup,please wait"
        yum install -y epel-release > /dev/null ;
        yum install -y percona-xtrabackup > /dev/null;
        }

    xtrabackup --user=$USER --password=$PASSWORD --backup --target-dir=$BACKUPDIR &> /dev/null || {
    echo "Backup database by xtrabackup failure";
    exit
    }
    echo "Complete the backup database by xtrabackup"
}

[ -d $BACKUPDIR ] || mkdir $BACKUPDIR

cat << EOF
There are two method to backup databases
1. mysqldump
2. xtrabackup
EOF

read -p "Please input 1 or 2: " NUMBER 

case $NUMBER in 
        1)
            MYSQLDUMP_BACKUP 
            ;;
        2)
            XTRABACK_BACKUP
            ;;
        *)
            echo -e "\nPlease input 1 or 2"
            ;;
esac

2、配置Mysql主從同步

此實驗需要準備兩臺虛擬機,一臺作主節點,另一臺作從節點。


# 配置主節點
# 編輯配置文件
sed -i '1a \
server_id=1 \
log_bin \
log-basename=master \
' /etc/my.cnf

systemctl restart mariadb

# 登錄mysql執行相關命令
mysql -uroot -p 

CREATE USER 'replace'@'192.168.0.%' IDENTIFIED BY 'bin2baki';
grant replication slave on *.* TO 'repluser'@'192.168.0.%
show master logs;

# 配置從節點
sed -i '1a \
server_id=2 \
log-bin \
read_only=ON \
relay_log=relay-log \
relay_log_index=relay-log.index \
' /etc/my.cnf

systemctl restart mariadb

# 登錄mysql執行相關命令
mysql -uroot -p

# 參數MASTER_LOG_FILE和MASTER_LOG_POS需要從主節點的"show master logs;"命令的輸出信息中提取
CHANGE MASTER TO MASTER_HOST='192.168.0.50',
MASTER_USER='replace',
MASTER_PASSWORD='bin2baki',
MASTER_PORT=3306,
MASTER_LOG_FILE='master-bin.000003',
MASTER_LOG_POS=245;

start slave;
show slave status\G
# 必須檢查“show slave status\G”命令的輸出信息是否有錯誤信息

3、使用MHA實現Mysql高可用

此實驗需要準備四臺虛擬機,一臺MHA節點,一臺MySQL主服務器,兩臺MySQL從服務器。
mha4mysql-manager和mha4mysql-node的下載鏈接:https://github.com/yoshinorim/mha4mysql-manager/releases,https://github.com/yoshinorim/mha4mysql-node/releases
先從Github下載這兩個軟件包,再從物理機上傳到虛擬機

# 生成密鑰對,然後將公鑰傳到其它三臺服務器
# 這個操作需要在四臺服務器上都操作一遍
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa &> /dev/null
ssh-copy-id 192.168.0.52
ssh-copy-id 192.168.0.13
ssh-copy-id 192.168.0.50
ssh-copy-id 192.168.0.51

# 配置MHA節點
# 安裝mha4mysql-node
yum localinstall -y mha4mysql-manager-0.58-0.el7.centos.noarch.rpm mha4mysql-node-0.58-0.el7.centos.noarch.rpm

# 創建配置文件
mkdir /etc/mastermha/

cat > /etc/mastermha/app1.cnf << EOF
[server default]
user=mha
password=examp1e
manager_workdir=/data/mastermha/app1/
manager_log=/data/mastermha/app1/manager.log
remote_workdir=/data/mastermha/app1/
master_binlog_dir=/data/mysql/

ssh_user=root
repl_user=repluser
repl_password=examp1e
ping_interval=1

[server1]
hostname=192.168.0.13
candidate_master=1 

[server2]
hostname=192.168.0.50
candidate_master=1 

[server3]
hostname=192.168.0.51
EOF

# MySQL主服務器
yum localinstall -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm

sed -i '1a \
log-bin \
server_id=100 \
skip_name_resolve=1 \
' /etc/my.cnf

systemctl restart mariadb

mysql -uroot -p

show master logs;
grant replication slave on *.* to repluser@'192.168.0.%' identified by 'examp1e'; 
grant all on *.* to mha@'192.168.0.%' identified by 'examp1e';

# MySQL從服務器
yum localinstall -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm

# 兩個MySQL從服務器的server_id不能一樣
sed -i '1a \
log-bin \
read_only \
relay_log_purge=0 \
server_id=102 \
skip_name_resolve=101 \
' /etc/my.cnf

systemctl restart mariadb

mysql -uroot -p

CHANGE MASTER TO MASTER_HOST='192.168.0.13', MASTER_USER='repluser', MASTER_PASSWORD='examp1e', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=536;
START SLAVE;
SHOW SLAVE STATUS\G;

# 在MHA服務器進行檢查
masterha_check_ssh --conf=/etc/mastermha/app1.cnf &> /dev/null && echo OK
masterha_check_repl --conf=/etc/mastermha/app1.cnf &> /dev/null && echo OK

# 啓動MHA
nohup masterha_manager --conf=/etc/mastermha/app1.cnf &> /dev/null
# 檢查MHA的狀態狀態
masterha_check_status --conf=/etc/mastermha/app1.cnf
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章