1. 程式人生 > >使用percona-xtrabackup工具對mysql數據庫的備份方案

使用percona-xtrabackup工具對mysql數據庫的備份方案

因此 name 遠程 tables pex 兩臺 days 裝包 support

使用percona-xtrabackup工具對mysql數據庫的備份方案

需要備份mysql的主機 172.16.155.23
存放備份mysql的主機 172.16.155.22

目的:將155.23主機上mysql數據庫每天全量備份一次,並且同步到遠程主機中

1.安裝備份工具

yum localinstall -y percona-xtrabackup-2.2.9-5067.el6.x86_64.rpm

2.編寫備份數據庫腳本:

vim /data/scripts/backdb.sh

#!/bin/bash

back_time=`date +%Y%m%d%H%M%S`
backpath
="/app/mysqlbak" cd $backpath && /bin/mkdir $back_time echo "start back ${back_time}" >> /app/mysqlbak/backdb.log # completely backup /usr/bin/innobackupex --defaults-file="/etc/my.cnf" --user=root --password=pass --socket=/tmp/mysql.sock $backpath/$back_time /usr/bin/scp -P 58422 -l 200000 -r $backpath/$back_time 172.16
.155.22:/app/mysqlbak/ # delete 15 days ago backup /bin/find /app/mysqlbak -type d -mtime +15 -exec rm -rf {} \; echo "end back ${back_time}" >> /app/mysqlbak/backdb.log

chmod +x /data/scripts/backdb.sh

3.配置155.23免密碼訪問155.22
[root@sdtw04 20171127]# ssh-keygen -t rsa -P ‘‘
如果ssh端口非默認的22端口,使用如下命令:
ssh-copy-id -i /root/.ssh/id_rsa.pub "-p 58422 [email protected]"

計劃任務,每天晚上1點1分備份一次:
1 1 * * * /bin/bash /data/scripts/bakdb.sh >/dev/null 2>&1

4.目標備份服務器配置,刪除7天以前的備份:
mkdir -p /app/mysqlbak/

2 2 * * * /bin/find /app/mysqlbak/ -mtime +7 -exec rm -rf {} \;


數據庫的臨時方案:
1.配置兩臺服務器都啟動mysql服務,其中一臺是目前正在運行的服務器,另外一臺作為備用
2.每天備份一次數據,然後傳送到遠程服務器,刪除10天以前的備份
3.如果正在使用的mysql宕機則恢復最新數據到備用mysql,然後恢復最新數據到備用mysql
記得修改解析/etc/hosts文件
172.16.155.23 db.mysql.com

恢復的具體操作:

恢復準備工作:
目標服務器安裝和原服務器一樣的Mysql版本(見最下面的附錄)

# 1.完整備份現有mysql的數據庫
# completely backup
/usr/bin/innobackupex --defaults-file="/etc/my.cnf" --user=root --password=pass --socket=/tmp/mysql.sock /app/mysqlbak/back_time

# 2.傳送備份數據到目標機器
scp -P 58422 -r 2017-11-27_16-52-50 172.16.155.22:/app/mysqlbak/

# 3.目標機器執行:

# 因此,我們現在就是要通過回滾未提交的事務及同步已經提交的事務至數據文件也使得數據文件處於一致性狀態
innobackupex --user=root --password=pass --defaults-file=/tmp/my.cnf --apply-log /app/mysqlbak/2017-11-27_16-52-50

# 4.關掉服務,遷移已有的數據目錄
service mysqld stop
# cd /app/data
[root@sdtw03 data]# mv mydata mydata_old
[root@sdtw03 data]# mkdir mydata
[root@sdtw03 data]# chown -R mysql.mysql mydata
# 5.執行innobackupex恢復命令
innobackupex --defaults-file=/etc/my.cnf --user=root --password=pass --copy-back /app/mysqlbak/2017-11-27_16-52-50

# 6.修改權限,啟動服務
chown -R mysql.mysql /app/data/mydata
service mysqld start


安裝數據庫mysql5.6二進制版本
安裝包mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz

groupadd -r mysql
useradd -g mysql -r -s /sbin/nologin mysql
tar -zxvf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz -C /usr/local

cd /usr/local
ln -sv mysql-5.6.36-linux-glibc2.5-x86_64 mysql

cd mysql
chown -R root.mysql ./*

mkdir /app/data/mydata -p
chown -R mysql.mysql /app/data/mydata
mkdir /app/data/binlogs
chown -R mysql.mysql /app/data/binlogs

cd /usr/local/mysql
scripts/mysql_install_db --datadir=/app/data/mydata --user=mysql

將服務腳本拷貝到啟動項
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig --list mysqld

\cp my.cnf /etc/my.cnf

vim /etc/my.cnf

[client]
port = 3306
socket = /tmp/mysql.sock
default-character-set = utf8

[mysqld]
port = 3306
innodb_file_per_table = 1
init-connect = ‘SET NAMES utf8mb4‘
character-set-server = utf8mb4
default_storage_engine = InnoDB
skip-name-resolve
skip-external-locking

datadir = /app/data/mydata
log-bin=/app/data/binlogs/master-bin
binlog_format=row

socket=/tmp/mysql.sock

interactive_timeout = 28800
wait_timeout = 28800

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

[mysqldump]
quick
max_allowed_packet = 16M

[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M
read_buffer = 4M
write_buffer = 4M

# 啟動服務
service mysqld start

刪除匿名用戶,配置root密碼
mysql> delete from user where host=‘::1‘;
mysql> delete from user where host=‘sdtw03‘;
mysql> delete from user where host=‘localhost‘ and user=‘‘;

mysql> update user set password=PASSWORD(‘pass‘) where user=‘root‘;
mysql> flush privileges;

添加yun具有所有權限
mysql>grant all privileges on *.* to [email protected] identified by ‘pass‘;
mysql>flush privileges;

使用percona-xtrabackup工具對mysql數據庫的備份方案