数据库的备份

https://www.jianshu.com/p/63ebd5e5f863
解决无法进行逻辑备份(mysqldump),提示索引用户为免密登录的报错

mysqldump: Got error: 1449: The user specified as a definer ('skip-grants user'@'skip-grants host') does not exist when using LOCK TABLES

image.png

数据库初始化:

mysqld   --initialize   --user=mysql
image.png

--initialize-insecure 使用空密码。你应该在生产中及时修改密码。
或者使用 --initialize 这样的话,会为 root 用户生成一个随机的密码。
这个随机密码可能会被输出到初始化过程中,也有可能输出到错误日志中

MySQL 逻辑备份 mysqldump

逻辑备份特点

备份的是建表、建库、插入等操作所执行SQL语句(DDL DML DCL),适用于中小型数据库。
效率相对较低
mysqldump的优势:
可以查看或者编辑十分方便,它也可以灵活性的恢复之前的数据。
不关心底层的存储引擎,既适用于支持事务的,也适用于不支持事务的表。
不过它不能作为一个快速备份大量的数据或可伸缩的解决方案。如果数据库过大,即使备份步骤需要的时间不算太久,但有可能恢复数据的速度也会非常慢,因为它涉及的SQL语句插入磁盘I/O,创建索引等等。 对于大规模的备份和恢复,更合适的做法是物理备份,复制其原始格式的数据文件,可以快速恢复

用法

mysqldump  -h 服务器  -u用户名  -p密码   数据库名  > 备份文件.sql

/*查看帮助*/
mysqldump --help

常见参数

--single-transaction 备份前启用一个事务,保证数据一致性。
仅对 InnoDB 存储引擎有效。还有需要保证没有其他的连接正在使用以下语句: ALTER TABLE, CREATE TABLE,DROP TABLE, RENAME TABLE, TRUNCATE TABLE
-l, --lock tables 对于不支持事务的存储引擎的表备份使用此选项,比如 MySAM, 可以保证备份期间的数据一致性。会依次对正在备份的每个数据库中的所有表进行锁表操作,此时只可以读。和 --single-transaction 互斥。
-x, --lock-all-tables 锁定所有数据库中的所有表。这是通过在整个转储期间采用全局读锁来实现。

vim root_mysql.db
vim .bashrc (起别名后方便后面使用)
. ./.bashrc 或者source /.bashrc


image.png
image.png

mysqldump --databases db1 db2 db3 > `date +%FT%H_%M_%S`dump_all.sql
                                             备份数据库
mysqldump db1 t1 t3 t7 > dump.sql            备份指定库的指定几个表


 
mysql -uroot -p123456   db1  < dump.sql          恢复数据库

source dump.sql          在mysql中恢复数据库

有些表需要先创一个数据库才能恢复进去    

mysql -uroot -p'QFedu123!' -e "create database servers" < dum.mem

MySQL 物理备份: Innobackupex 和 xtrabackup(热备)

Percona XtraBackup是一款基于MySQL的热备份的开源实用程序,它可以备份5.1到5.7版本上InnoDB,XtraDB,MyISAM存储引擎的表, Xtrabackup有两个主要的工具:xtrabackup、innobackupe

确保安装 EPEL 源
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

安装 libev
为了成功安装Percona XtraBackup libev包需要先安装。
yum  install -y libev

安装Percona存储库
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

测试存储库的可用性
shell> yum list | grep percona


安装软件
shell> yum install percona-xtrabackup-24

验证安装
rpm -qa | grep percona

物理备份数据库以及还原步骤

1 将所有库进行物理备份

 xtrabackup --backup --user=root --password='QFedu123!'  --target-dir=/backup/full   (mkdir -p /backup/full)

xtrabackup_logfile  记录操作过程的日志,事件

2停止数据库服务

systemctl stop mysqld

3.清除原来的数据库

rm -rf /var/lib/mysql/*

4将原来备份好的物理数据进行复原

 xtrabackup --copy-back --datadir=/var/lib/mysql --target-dir=/backup/full

5修改属主权限

chown mysql.mysql -R /var/lib/mysql

6启动数据库查看是否还原

systemctl start mysqld

增量备份

image.png
image.png

1.准备基础备份的数据

shell> xtrabackup --prepare --apply-log-only --target-dir=/backups/base
                           这个参数阻止回滚操作
...省略...
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 13596441
InnoDB: Number of pools: 1
180818 11:56:55 completed OK!

2.把第一次增量备份的数据合并到基础备份的数据中

 xtrabackup  --prepare  --apply-log-only  --user=root --password=123  --target-dir=/backups/base  --incremental-dir=/backups/inc1

3.再把第二次增量备份的数据也合并到基础备份的数据中

xtrabackup --prepare --user=root --password=123  --target-dir=/backups/base  --incremental-dir=/backups/inc2
注意: 最后一次操作不需要加 --apply-log-only 参数

4.停止 MySQL 服务,并删除数据目录和日志

systemctl stop mysqld
rm -rf /var/lib/mysql/*

5.开始恢复合并后的全部数据的数据库

 xtrabackup --copy-back  --datadir=/var/lib/mysql  --target-dir=/backups/base/

6.更改数据库目录的权限并启动数据库

chown mysql.mysql -R /var/lib/mysql
systemctl start mysqld

你可能感兴趣的:(数据库的备份)