使用percona-xtrabackup工具对mysql数据库的备份方案

需要备份mysql的主机 172.16.155.23
存放备份mysql的主机 172.16.155.22

目的:将155.23主机上mysql数据库每天全量备份一次,并且同步到远程主机中

1.安装备份工具

yum localinstall -y percona-xtrabackup-2.2.-.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" --host='127.0.0.1' --user=root --password=pass --socket=/tmp/mysql.sock $backpath/$back_time /usr/bin/scp -P -l -r $backpath/$back_time 172.16.155.22:/app/mysqlbak/ # delete days ago backup
/bin/find /app/mysqlbak -type d -mtime + -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 root@172.16.155.22"

计划任务,每天晚上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" --host='127.0.0.1' --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

max_connections = 2000  # 最大连接数

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 yunva@106.75.74.38 identified by 'pass';
mysql>flush privileges;

修改主机名后,mysql无法正常重启,报错如下:

[root@sdtw04 ~]# /etc/init.d/mysqld restart
ERROR! MySQL server PID file could not be found!
Starting MySQL.........

是因为mysql的错误日志绑定在了原来的机器名上,需要强制关闭mysql
kill -9 pid
然后再次启动即可

一次恢复zabbix从库数据的示例

背景介绍:
数据库为zabbix
master --> slave 结构
因为zabbix数据库超过40G,单表数据量超过2亿,开始出现卡顿情况,决定进行清理
清理后发现部分历史数据需要查看,于是进行恢复 # 原备份服务器操作
.清理前在从库进行了备份,备份步骤如下
完整备份现有mysql的数据库
# completely backup
/usr/bin/innobackupex --defaults-file="/etc/my.cnf" --host='127.0.0.1' --user=root --password=pass --socket=/tmp/mysql.sock /data/mysqlbak/back_time .在原slave机器执行:回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态(主要是需要my.cnf保持一致)
innobackupex --user=root --password=pass --defaults-file=/tmp/my.cnf --apply-log /app/mysqlbak/--27_16-- # 目标服务器操作:
a.传送备份数据到要恢复的目标机器,目标机器也需要使用 在 slave 中备份的my.cnf文件,否则会报错(注意去掉read_only=on选项)
scp -P -r /data/mysqlbak/back_time dst_ip:/app/mysqlbak/ b.关掉数据库服务,迁移已有的数据目录
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
# .执行innobackupex恢复命令
innobackupex --defaults-file=/etc/my.cnf --host='127.0.0.1' --user=root --password=pass --copy-back /app/mysqlbak/--27_16-- # .修改权限,启动服务
chown -R mysql.mysql /app/data/mydata
service mysqld start 此时就可以正常进行启动了

使用percona-xtrabackup工具对mysql数据库的备份方案的更多相关文章

  1. 关于MySQL数据库的备份方案

    这里简单总结MySQL的备份分为3种:分为冷备份,逻辑备份,热备份. 1.冷备份: 一般主要用于非核心业务,这类业务一般都是允许业务中断的,冷备份的特点就是数度快,恢复时也最为简单.通常直接复物理文件 ...

  2. 通过xtrabackup工具对mysql数据库做全备

    需求描述: 使用xtrabackup工具对mysql实例中的所有的数据库进行备份,并且将备份的过程输出到指定的日志文件中. 操作过程: 1.使用xtrabacup工具备份mysql实例 xtrabac ...

  3. mysqldump工具实现mysql数据库的备份还原

    简介 冷.温.热备份 冷备:读写操作均不可进行 温备:读操作可执行:但写操作不可执行 热备:读写操作均可执行 MyISAM:温备,不支持热备 InnoDB:都支持 不管是热备还原还是冷备还原,还原时都 ...

  4. MYSQL启用日志,查看日志,利用mysqlbinlog工具恢复MySQL数据库【转载】

    转自 MYSQL启用日志,查看日志,利用mysqlbinlog工具恢复MySQL数据库 - _安静 - 博客园http://www.cnblogs.com/xionghui/archive/2012/ ...

  5. pycharm工具连接mysql数据库失败

    在使用pycharm开发工具连接mysql数据库时提示错误,信息如下: Server returns invalid timezone. Go to 'Advanced' tab and set 's ...

  6. mysql数据库的备份和还原的总结

    mysql数据库的备份和还原的总结 (来自一运维同事的总结) 1. 备份方式: 热备:数据库在线进行备份,不影响读和写的在线备份方式! 温备:数据库在线进行备份,对表备份时先锁定写操作,仅可以执行读操 ...

  7. 企业级mysql数据库完全备份、增量备份脚本

    企业完全备份脚本 [root@client ~]# vim /opt/mysql_bak_wanbei.sh #!/bin/bash #MySQL数据库完全备份脚本 #设置登录变量 MY_USER=& ...

  8. MySQL数据库入门备份数据库

    MySQL数据库入门——备份数据库   一提到数据,大家神经都会很紧张,数据的类型有很多种,但是总归一点,数据很重要,非常重要,因此,日常的数据备份工作就成了运维工作的重点中的重点的重点....... ...

  9. 如何用SQL语句实现Mysql数据库的备份与还原

    以前一直做android客户端的项目,根本没有开发asp.net mvc的开发,现阶段做了一个模块,参数设置,以及数据库的备份与还原.其需求如下: 参数设置 本项参数设置为对自动数据备份进行设置,管理 ...

随机推荐

  1. Java高并发秒杀API之Service层

    Java高并发秒杀API之Service层 第1章 秒杀业务接口设计与实现 1.1service层开发之前的说明 开始Service层的编码之前,我们首先需要进行Dao层编码之后的思考:在Dao层我们 ...

  2. 如何比较一个类型【模板使用】【sizeof用法】

    #include <iostream> using namespace std; void testEmptyClass(); struct Empty { }; struct Dummy ...

  3. MVC、MVP和MVVC区别

    https://blog.csdn.net/victoryzn/article/details/78392128

  4. NET Core Kestrel部署HTTPS使用SSL证书

    ASP.NET Core配置 Kestrel部署HTTPS.现在大部分网站已经部署HTTPS,大家对于安全越来越重视. 今天简单介绍一下ASP.NET Core 部署HTTPS,直接通过配置Kestr ...

  5. transitionEnd不起作用解决方法

    var show = function(html, className) { className = className || ""; var mask = $("< ...

  6. linux下有名管道进程通信

    一.任务 1.学习mkfifo等函数: 2.了解有名管道的特点.阻塞打开与非阻塞打开等: 3.编写一个关于有名管道进程通信的程序,并运行. 二.相关概念 1.相关函数 创建有名管道的函数是mkfifo ...

  7. [C++]油田(Oil Deposits)-用DFS求连通块

    [本博文非博主原创,均摘自:刘汝佳<算法竞赛入门经典>(第2版) 6.4 图] [程序代码根据书中思路,非独立实现] 例题6-12 油田(Oil Deposits,UVa572) 输入一个 ...

  8. Spark的四种部署方式并对应四种提交方式

    1 Local模式     本地模式  local模式 一台机器即可,开箱即用 不指定master,或者 --master  local  local[N]  local[*] local模式下,使用 ...

  9. python加密(MD5)

    # import hashlib # # 1. 创建一个MD5对象 # obj = hashlib.md5(b"flkjsdalkfjklasdjfklasjkflasdjklfasdjfl ...

  10. Django学习手册 - pycharm 安装/建立第一个网站hello world

    步骤阐述: 1.下载 pycharm 安装包,安装pycharm 2.打开pycharm软件,新建工程项目 3.新建APP,配置url,启动项目 步骤1: pycharm 官网下载: https:// ...