数据库备份,恢复实操
策略一:(文件系统备份工具 cp )(适合小型数据库,是最可靠的)1 、停止 MySQL 服务器。2 、直接复制整个数据库目录。注意:使用这种方法最好还原到相同版本服务器中,不同版本可能不兼容。3 、目标服务器上还原。4 、目标服务器数据库目录授权,重启服务器测试
策略二:mysqldump 备份数据库(完全备份 + 增加备份,速度相对较慢,适合中小型数据库) ( MyISAM 是温备份, InnoDB 是热备份)示例一:备份恢复单个数据库备份:mydqldump - u 用户 –p’ 密码 ’ –default - character - set = Iatin1 数据库名 [ | gzip ] > 备份文件名恢复:1 ) MySQL 中用 source 命令2 ) mysql 命令恢复示例二:备份恢复单个表备份:mysqldump - u 用户名 - p 数据库名 表名 > 备份的文件名备份多个表:mysqldump - u 用户名 - p 数据库名 表名 1 表名 2 > 备份的文件名示例三:备份数据结构- d 只备份库结构,不包含数据内容示例四:增量备份前提: 1 ) my .cnf ,是要开启 MySQL log - bin 日志功能,重启 MySQL log_bin =/data/mysql/data/mysql - bin2 )存在一个完全备份,生产环境一般凌晨某个时刻进行全备InnoDB 表在备份时,通常启用选项 -- single - transaction 来保证备份的一致性
策略三: mydumper 备份数据库# 1.编译安装 [root@localhost ~]# yum -y install glib2-devel mysql-devel zlib-devel pcre-devel zlib gcc-c++ gcc cmake [root@localhost ~]# wget https://launchpad.net/mydumper/0.9/0.9.1/+download/mydumper-0.9.1.tar.gz [root@localhost ~]# tar zxf mydumper-0.9.1.tar.gz [root@localhost ~]# cd mydumper-0.9.1/ [root@localhost mydumper-0.9.1]# cmake . [root@localhost mydumper-0.9.1]# make [root@localhost mydumper-0.9.1]# make install # 安装完成后生成两个二进制文件 mydumper 和 myloader 位于 /usr/local/bin 目录下 [root@localhost bin]# ls /usr/local/bin/ mydumper myloader
mydumper 输出文件metadata: 元数据 记录备份开始和结束时间,以及 binlog 日志文件位置。table data : 每个表一个文件table schemas : 表结构文件binary logs : 启用 -- binlogs 选项后,二进制文件存放在 binlog_snapshot 目录下daemon mode : 在这个模式下,有五个目录 0 , 1 , binlogs , binlog_snapshot , last_dump 。备份目录是 0 和 1 ,间隔备份,如果 mydumper 因某种原因失败而仍然有一个好的快照,当快照完成后, last_dump 指向该备份。 Mydumper 备份示例[ root @localhost ~ ] # mydumper -h localhost -u root -p 888 -t 6 -S/tmp/mysql.sock -B school -o /mysqlbackup/[ root @tianyun ~ ] # ls /mysqlbackup/binlog_snapshot school .student1.sql school .student4 -schema .sql school .t2_old - schema .sql...[ root @localhost ~ ] # cat /mysqlbackup/metadataStarted dump at : 2015 - 09 - 15 10 : 12 : 54SHOW MASTER STATUS :Log: tianyun - bin .000003Pos: 2089998Finished dump at : 2015 - 09 - 15 10 : 12 : 54Mydumper 恢复示例[ root @localhost ~ ] # myloader -h localhost -u root -p 888 -S /tmp/mysql.sock-d /mysqlbackup/ -o -B school
策略四: lvm 快照从物理角度实现几乎热备的完全备份,配合二进制日志备份实现增量备份,速度快适 合比较烦忙的数据库前提:数据文件要在逻辑卷上;此逻辑卷所在卷组必须有足够空间使用快照卷;数据文件和事务日志要在同一个逻辑卷上;操作流程1 )锁表 flush table with read lock2 )查看 position 号并记录,便于后期恢复 show master status3 )创建 snapshot 快照 create snapshop4 )解表 unlock tables5 )挂载 snapshot6 )拷贝 snapshot 数据,进行备份。备份整个数据库之前,要关闭 mysql 服务(保护 ibdata1 文件)7 )卸载8 )移除快照
一、数据库备份,数据库为school,素材如下
[root@localhost ~]# mysql -uroot -p123456
mysql> create database school;
mysql> use school;
1.创建student和score表
CREATE TABLE student (
id INT(10) NOT NULL UNIQUE PRIMARY KEY ,
name VARCHAR(20) NOT NULL ,
sex VARCHAR(4) ,
birth YEAR,
department VARCHAR(20) ,
address VARCHAR(50)
);
二、MySQL主从复制
MySQL集群高可用架构,MySQL主从架构,此种架构,一般初创企业比较常用,也便于后面步步的扩展
2.1创建score表。SQL代码如下:
CREATE TABLE score (
id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT ,
stu_id INT(10) NOT NULL ,
c_name VARCHAR(20) ,
grade INT(10)
);
2.2为student表和score表增加记录
如果无法插入中文可以去下面这篇博客
(12条消息) MySQL插中文报错“ERROR 1366 (HY000): Incorrect string value: ‘\xE7\xAC...”修改MySQL字符集,数据库字符集,表的字符集,表中字段的字符集_[err] 1366 - incorrect string value: '\xe7\xa9\xba_未注销233的博客-CSDN博客
向student表插入记录的INSERT语句如下:
INSERT INTO student VALUES( 901,'张老大', '男',1985,'计算机系', '北京市海淀区');
INSERT INTO student VALUES( 902,'张老二', '男',1986,'中文系', '北京市昌平区');
INSERT INTO student VALUES( 903,'张三', '女',1990,'中文系', '湖南省永州市');
INSERT INTO student VALUES( 904,'李四', '男',1990,'英语系', '辽宁省阜新市');
INSERT INTO student VALUES( 905,'王五', '女',1991,'英语系', '福建省厦门市');
INSERT INTO student VALUES( 906,'王六', '男',1988,'计算机系', '湖南省衡阳市');
向score表插入记录的INSERT语句如下:
INSERT INTO score VALUES(NULL,901, '计算机',98);
INSERT INTO score VALUES(NULL,901, '英语', 80);
INSERT INTO score VALUES(NULL,902, '计算机',65);
INSERT INTO score VALUES(NULL,902, '中文',88);
INSERT INTO score VALUES(NULL,903, '中文',95);
INSERT INTO score VALUES(NULL,904, '计算机',70);
INSERT INTO score VALUES(NULL,904, '英语',92);
INSERT INTO score VALUES(NULL,905, '英语',94);
INSERT INTO score VALUES(NULL,906, '计算机',90);
INSERT INTO score VALUES(NULL,906, '英语',85);
3.备份数据库school到/backup目录
[root@localhost ~]# mkdir -p /backup/mysql
# 备份数据库
[root@localhost ~]# mysqldump -uroot -p123456 student > /backup/mysql/t1.sql
# 加上-B参数,备份数据库时创建数据库和切换数据库
[root@localhost ~]# mysqldump -uroot -p123456 -B student > /backup/mysql/t1_2.sql
# 备份时,压缩备份文件
[root@localhost ~]# mysqldump -uroot -p123456 -B student | gzip > /backup/mysql/t1_3.sql.gz
4.备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库
mysqldump --add-drop-table -uroot -p123456 school > t2.sql
5.直接将MySQL数据库压缩备份
[root@localhost ~]# mysqldump -uroot -p123456 -B school | gzip > /backup/mysql/t3.sql.gz
6.备份MySQL数据库某个(些)表。此例备份student表
[root@localhost ~]# mysqldump -uroot -p123456 school student >/backup/mysql/t4.sql
7.同时备份多个MySQL数据库(其他数据库素材自行准备)
[root@localhost ~]# mysqldump -uroot -p123456 -B study school > /backup/mysql/t5.sql
8.仅仅备份数据库结构
mysqldump --no-data -uroot -p123456 --databases student > /backup/mysql/t6.sql
9.备份服务器上所有数据库
mysqldump -uroot -p123456 -A >/backup/mysql/all.sql
10.还原MySQL数据库
直接导入会报错,在 mysql 执行 reset master命令,退出后再执行还原命令即可
mysql> reset master;
[root@localhost ~]# mysql -uroot -p123456 -B student < /home/mysql/t1_2.sql
如果前面使用cp备份的,可以使用cp回去
cp -a /var/lib/mysql/* /backup #保留权限的拷贝源数据文件
cp -a /backup/* /var/lib/mysql/
11.还原压缩的MySQL数据库
# 方法一:直接恢复
[root@localhost mysql]# zcat t1_3.sql.gz | mysql -uroot -p123456
# 方法二:解压后在 mysql 命令行恢复
[root@localhost mysql]# gzip -d t1_3.sql.gz
mysql> source /home/mysql/t1_3.sql
12.使用xtrabackup 备份数据库
innobackupex开源,xtrabackup商业化
使用经典命令会产生时间戳数据库。
[root@localhost ~]# innobackupex --user=root --password=123456 --socket=tmp/mysql.sock /backup/mysql/
[root@localhost ~]# innobackupex --user=root --password=123456 --socket=tmp/mysql.sock --no-timestamps /backup/mysql/full_'data+%F'
13.在另外的数据库服务器上还原xtrabackup 备份
[root@localhost ~]# ll /backup/mysql/2023-03-28_20-41-39/
backup-my.cnf#备份用到的配置选项信息文件
ibdata1#数据文件
xtrabackup_binlog_info #mysql服务器当前正在使用的二进制日志文件和此时二进制日志时间的位置信息文件
xtrabackup_checkpoints #备份的类型、状态和LSN状态信息文件
xtrabackup_info #详细信息
xtrabackup_logfile #备份的日志文件
备份应用
[root@localhost 2023-03-28_20-41-39]# innobackupex --apply-log /backup/mysql/2023-03-28_20-41-39/
停止数据库[root@localhost 2023-03-28_20-41-39]# systemctl stop mysqld
还原数据库到默认目录
[root@localhost 2023-03-28_20-41-39]# innobackupex --copy-back /backup/mysql/2023-03-28_20-41-39/
修改数据文件属主属组
[root@localhost 2023-03-28_20-41-39]# chown -R mysql.mysql /usr/local/mysql/data/
启动数据库
[root@localhost 2023-03-28_20-41-39]# systemctl start mysql
14.使用mydumper备份数据库
# mydumper工具备份
[root@localhost ~]# mydumper -u root -p 123456 -B student -o /mysql_back
# mydumper工具备份,同时压缩
[root@localhost ~]# mydumper -u root -p 123456 -B student -c -o /mysql_back
# 备份表
[root@localhost ~]# mydumper -u root -p 123456 -B student -T student,course -o /backup/tables
15.使用mydumper恢复数据库
# 恢复文件
localhost-mysql
[root@localhost ~]# myloader -u root -p 123456 -B student -o -d /mysql_back/
# 恢复表
[root@localhost ~]# myloader -u root -p 123456 -d /backup/tables/ -o -B student
mydumper 参数
myloader 参数