使用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. cmd快速设置本机ip和dns【转】

    . 参考: https://wenku.baidu.com/view/74c59947336c1eb91a375dbe.html 家里配置如下 尾部的1不要忘了 netsh interface ip ...

  2. windows下安装nginx,并添加至系统服务

    安装:解压修改配置文件运行即可 添加服务 需要借助"Windows Service Wrapper"小工具下载地址:winsw GitHub 下载后放在nginx目录下,并修改名字 ...

  3. Linux命令(十一)gcc

    1. gcc -E 预处理 头文件展开 宏替换 2. gcc -S: 生成汇编指令 3. gcc - c: 生成二进制文件 4. gcc -I: (包含头文件) 5. gcc -o: 指定输出 6. ...

  4. Redis学习笔记(二)解析dump.rdb文件工具之redis-rdb-tools

    https://github.com/sripathikrishnan/redis-rdb-tools 我这里使用docker搭建 docker搭建文档 https://rdbtools.com/do ...

  5. python练习实例1--------给定数字组成三位数

    题目:有四个数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少? 来看第一种解法 num = [1, 2, 3, 4] """ 根据题中'互不相同' ...

  6. Baidu 人脸识别FireFly 与PC连接调试

    1.USB线插到离屏幕较远的双层USB口上方.2.安装驱动,OK.,然后就可以直接拷贝安装包或者连接调试了. 其它几个口都不行.

  7. Java8新特性_接口中的默认方法

    默认方法由来猜想 1. Collection接口.Collections公共类.  同是操作集合,为啥要搞俩?没必要.在接口中搞一些默认实现,一个接口即搞定了. 2. Java8支持Lambda表达式 ...

  8. ModSecurity SQL注入攻击 – 深度绕过技术挑战

    ModSecurity是一个入侵探测与阻止的引擎,它主要是用于Web应用程序所以也可以叫做Web应用程序防火墙.它可以作为Apache Web服务器的一个模块或单独的应用程序来运行.ModSecuri ...

  9. PHP的核心配置详解

    1.PHP核心配置详解 代码在不同的环境下执行的结果也会大有不同,可能就因为一个配置问题,导致一个非常高危的漏洞能够利用:也可能你已经找到的一个漏洞就因为你的配置问题,导致你鼓捣很久都无法构造成功的漏 ...

  10. Maven 那点事儿(转)

    0. 前言 Jason Van Zyl,在 Java 十大风云人物排行榜上或许会看到他. 这兄弟是干嘛的? 他就是 Maven 的创始人,人们都尊称他为“Maven 他爸”. 毋庸置疑,Jason 也 ...