一、数据备份
1、使用 mysqldump 命令备份
(1)使用mysqldump 备份单个数据库中的所有表。
(2)使用mysqldump 备份数据库中的某个表
(3)使用mysqldump 备份多个数据库
2、直接复制真个数据库数据目录
二、数据恢复
1、使用 mysql 命令恢复
2、直接复制这个数据库数据目录
三、相同版本数据迁移
四、表的导出和导入
1、使用 select … into outfile 导出文件
2、使用 mysqldump 命令导出文本文件
3、使用mysql 命令导出文本文件
4、使用 load data infile 方式导入文本文件
5、使用mysqlimport 命令导入文本文件
五、mysql 5.7 的三种备份(8.0其中两种也能用)
- 完全备份
- 增量备份
- 差异备份
1、Percona-xtrabackup备份案例
1)软件包安装
2)完全备份
3)增量备份:先做完整备份,在做增量备份
4)差异备份:先做完整备份,在做差备份
2、Mysqldump+binlog备份案例(8.0也可以用)
1)原理:锁表机制,可以做到热备
2)备份流程
3)删除数据流程
4)恢复流程
3、记录的导入导出(8.0也可以用)
1)记录导出
2)记录导入
一、数据备份
1、使用 mysqldump 命令备份
mysqldump -u user -h host -p'password' dbname [ tbname,[tbname ... ] ] > filename.sql
- user 用户名
- host 主机名称
- password 登录密码
- dbname 数据库名
- tbname 表名称,可以指定同一个database 中的多个表
- filename.sql 备份文件的名称。
(1)使用mysqldump 备份单个数据库中的所有表。
mysqldump -u root -p booksdb > booksdb_bak.sql
(2)使用mysqldump 备份数据库中的某个表
mysqldump -u root -p bookdb tbname1,tbname2 > bookdb_bak.sql
(3)使用mysqldump 备份多个数据库
mysqldump -u root -h host -p --databases dbname1,dbname2 > filename.sql
- –databases 最少跟一个数据库名称
2、直接复制真个数据库数据目录
默认是这个路径:/var/lib/mysql
二、数据恢复
1、使用 mysql 命令恢复
muysql -u root -p dbname < filenmae.sql
或者
如果登录了mysql服务器可以用如下命令
mysql> source filename
2、直接复制这个数据库数据目录
默认是这个路径:/var/lib/mysql
三、相同版本数据迁移
mysqldump -h www.bac.com -u root -ppasswd dbname | myql -h www.bcd.com -u root -ppasswd
- “|” 是管道符,mysqldump 通过管道符传给www.bcd.com 主机,如果要迁移全部数据库,可以使用使用参数 --all-databases。
四、表的导出和导入
1、使用 select … into outfile 导出文件
select columnlist from table where condition into outfile 'filename' [ options]
--options 选项
fields terminated by 'value'
fields [ optionally ] enclosed by 'value'
fields escaped by 'value'
lines starting by 'value'
lines terminated by 'value'
- filename 为外部文件名称
- fields terminated by ‘value’ 设置字段之间的分隔符,可以为单个或多个字符,默认为制表符 ‘\t’。
- fields [ optionally ] enclosed by ‘value’ 设置字段的包围符,只能为单个字符,如果使用了 [ optionally ] ,则只能是使用 char 和 vachar 等字符数据字段被包围,int 的字段不会被包围。
- fields escaped by ‘value’ 设置如何写入或读取特殊字符,可以为单个或多个字符,默认值 ‘\’。
- lines starting by ‘value’ 设置每行数据开头的字符,可以为单个或多个字符,默认情况下不使用任何字符。
- lines terminated by ‘value’ 设置每行数据结尾的字符,可以为单个或多个字符,默认值 ‘\n’ 。
注:如果 fields 和 lines 都使用了,则 fields 必须在 lines 前。
注:如果数据为空,则显示 \N 。\ 是转义字符,N 是NULL
案例:
mysql> select * from tb_emp8 into outfile 'tb_emp8_bak20220108.sql'
-> fields
-> terminated by ','
-> optionally enclosed by '\"';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
1)直接写入会报错,要写绝对路径,要有写入权限,下面查看默认写入路径
mysql> show global variables like "%secure%";
+--------------------------+-----------------------+
| Variable_name | Value |
+--------------------------+-----------------------+
| require_secure_transport | OFF |
| secure_file_priv | /var/lib/mysql-files/ |
+--------------------------+-----------------------+
2 rows in set (0.01 sec)
2)如果要更改默认写入路径,则进入配置文件修改如下参数
secure-file-priv="/var/lib/mysql-files/ "
3)继续导出
mysql> select * from tb_emp8 into outfile '/var/lib/mysql-files/tb_emp8_bak20220108.sql'
-> fields
-> terminated by ','
-> optionally enclosed by '\"';
Query OK, 3 rows affected (0.00 sec)
4)查看内容
[root@192 mysql]# cat /var/lib/mysql-files/tb_emp8_bak20220108.sql | more
1,"lucy",\N,100
2,"lura",\N,1200
3,"kevin",\N,1500
2、使用 mysqldump 命令导出文本文件
mysqldump -T path -u root -p dbname [tables] [options]
--options 选项
--fields-terminated-by=value
--fields-enclosed-by=value
--fields-optionally-enclosed-by=value
--fields-escaped-by=value
--lines-terminated-by=value
- 只有指定了 -T 参数才能导出纯文本文件
- path 表示导出数据目录
- table 指定导出表,如果不指定,就会导出该数据库的所有表
- –fields-terminated-by=value 设置字段之间的分隔符,可以为单个或多个字符,默认为制表符 “\t”。
- –fields-enclosed-by=value 设置字段的包围字符。
- –fields-optionally-enclosed-by=value 设置字段之间的包围字符,只能为单个字符、只能包括 char 和 varchar 等字段数据。
- –fields-escaped-by=value 控制如何写入或读取特殊字符,只能为单个字符,即设置转义字符,默认为“\”。
- –lines-terminated-by=value 设置每行数据结尾的字符,可以为单个多个字符,默认值为“\n”。
注:会生成俩个文件:filename.txt 和 filename.sql ,filename.txt 是文件内容, filename.sql 是表的创建等语句
案例:
[root@192 mysql]# mysqldump -T /root test_db tb_emp8 -u root -p --fields-terminated-by=, --fields-optionally-enclosed-by=\"
Enter password:
mysqldump: Got error: 1290: The MySQL server is running with the --secure-file-priv option so it cannot execute this statement when executing 'SELECT INTO OUTFILE'
[root@192 mysql]# mysqldump -T /var/lib/mysql-files/ test_db tb_emp8 -u root -p --fields-terminated-by=, --fields-optionally-enclosed-by=\"
Enter password:
[root@192 mysql]# ls /var/lib/mysql-files/
tb_emp8_bak20220108.sql tb_emp8.sql tb_emp8.txt
[root@192 mysql]# cat /var/lib/mysql-files/tb_emp8.sql | more
-- MySQL dump 10.13 Distrib 8.0.27, for Linux (x86_64)
--
-- Host: localhost Database: test_db
-- ------------------------------------------------------
-- Server version 8.0.27
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `tb_emp8`
--
DROP TABLE IF EXISTS `tb_emp8`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `tb_emp8` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(25) NOT NULL,
`deptId` int DEFAULT NULL,
`salary` float DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
[root@192 mysql]# cat /var/lib/mysql-files/tb_emp8.txt | more
1,"lucy",\N,100
2,"lura",\N,1200
3,"kevin",\N,1500
[root@192 mysql]#
3、使用mysql 命令导出文本文件
[root@192 mysql]# mysql -uroot -p --execute='select 语句' dbname dbname > filename.txt
如果想记录到 html 文件中要加 --html 参数
- dbname 导出数据库的名称
4、使用 load data infile 方式导入文本文件
load data infile 'filename.txt' into table tablename [ options ] [ ignore number lines ]
-- options 选项
fields terminated by 'value'
fields [ optionally ] enclosed by 'value'
fields escaped by 'value'
lines starting by 'value'
lines terminated by 'value'
- fields terminated by ‘value’ 设置字段之间的分隔符,可以为单个字符或多个字符,默认为制表符“\t”。
- fields [ optionally ] enclosed by ‘value’ 设置字段的包围字符,只能为单个字符,如果使用了 optionally 参数,则只有char 和 varchar 等字符数据字段被包括。
- fields escaped by ‘value’ 控制如何写入或读取特殊字符,只能为单个字符,即设置转义字符,默认值“\”
- lines starting by ‘value’ 设置每行数据开头的字符,可以为单个或多个字符,默认情况下不使用任何字符。
- lines terminated by ‘value’ 设置每行数据结尾的字符,可以为单个或多个字符,默认值 ‘\n’ 。
- ignore number lines 忽略前number 行
案例
load data infile "/var/lib/mysql-files/tb_emp8.txt" into table test_db.tb_emp8
注:要提前建立这个表
5、使用mysqlimport 命令导入文本文件
mysqllimport -u root -p dbname filename.txt [ options ]
--options 选项
--fields-terminated-by=value
--fields-enclosed-by=value
--fields-optionally-enclosed-by=value
--fields-escaped-by=value
--lines-terminated-by=value
--ignore-lines=n
- –fields-terminated-by=value 设置字段之间的分隔符,可以为单个或多个字符,默认为制表符 “\t”。
- –fields-enclosed-by=value 设置字段的包围字符。
- –fields-optionally-enclosed-by=value 设置字段之间的包围字符,只能为单个字符、只能包括 char 和 varchar 等字段数据。
- –fields-escaped-by=value 控制如何写入或读取特殊字符,只能为单个字符,即设置转义字符,默认为“\”。
- –lines-terminated-by=value 设置每行数据结尾的字符,可以为单个多个字符,默认值为“\n”。
- –ignore-lines=n 忽视数据文件的前n行
案例
mysqlimport -u root -p test_db /var/lib/mysql-files/tb_emp8.txt
五、mysql 5.7 的三种备份(8.0其中两种也能用)
- 完全备份
- 增量备份
- 差异备份
1、Percona-xtrabackup备份案例
1)软件包安装
1、安装yum源:
#yum install -y https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm
# yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
2、安装两个相关的软件工具包
# yum install -y yum-utils // 第一个包
# yum repolist all | grep mysql //查看版本号
# yum-config-manager --disable mysql80-community // 禁用80
# yum-config-manager --enable mysql57-community // 开启57
# yum install mysql-community-libs-compat -y // 第二个包
3、安装Percona-xtrabackup软件
# yum -y install percona-xtrabackup-24.x86_64
4、查询结果:
rpm -ql percona-xtrabackup-24.x86_64
2)完全备份
1、备份流程
(1)设置备份到/xtrabackup/full(自己创建的)
# innobackupex --user=root --password='Huawei@123' /xtrabackup/full
(2)查看备份文件、二进制文件;
# ls /xtrabackup/full/
# ls /xtrabackup/full/2017-08-01_00-00-02/
# cat /xtrabackup/full/2017-08-01_00-00-18/xtrabackup_binlog_info
2、模拟磁盘损坏
# systemctl stop mysqld
# rm -rf /var/lib/mysql/*
# rm -rf /var/log/mysqld.log
3、恢复流程
(1)生成回滚日志(指定回滚备份)
# innobackupex --apply-log /xtrabackup/full/2017-08-01_00-00-18/
(2)恢复文件
# innobackupex --copy-back /xtrabackup/full/2017-08-01_00-00-18/
(3)改变文件权限
# chown -R mysql.mysql /var/lib/mysql
(4)开启MySQL:systemctl start mysqld
(5)登录验证:mysql -uroot -p’Huawei@123’
3)增量备份:先做完整备份,在做增量备份
一、备份流程
(1)备份周二:
1、添加数据:
# mysql -uroot -p’Huawei@123’ -e ‘insert into testdb.text values(2)’
2、修改时间:data 09020000
3、基于上次的完整备份,开始备份。
innobackupex --user=root --password='Huawei@123'
--incremental /xtrabackup/
--incremental-basedir=/xtrabackup/2017-09-01_00-00-04
4、查看备份数据:
# ls /xtrabackup/
2)备份周三:
1、添加数据:
# mysql -uroot -p’Huawei@123’ -e ‘insert into testdb.text values(2)’
2、修改时间:data 09030000
3、基于上次的完整备份,开始备份。
innobackupex --user=root --password='Huawei@123'
--incremental /xtrabackup/
--incremental-basedir=/xtrabackup/2017-09-01_00-02-04
4、查看备份数据:
ls /xtrabackup/
二、删库流程:
# systemctl stop mysqld
# rm -rf /var/lib/mysql/*
# rm -rf /var/log/mysqld.log
三、恢复流程:
1)生成回滚日志(指定回滚备份):
周一:innobackupex --apply-log --redo-only /xtrabackup/2017-09-01_00-00-04
周二: innobackupex --apply-log --redo-only /xtrabackup/2017-09-01_00-00-04 --incremental-dir=/xtrabackup/2017-09-02_00-00-26
2)恢复文件:
# innobackupex --copy-back /xtrabackup/2017-09-01_00-00-06
3)改变文件权限:# chown -R mysql.mysql /var/lib/mysql
4)开启MySQL:systemctl start mysqld
5)登录验证:
4)差异备份:先做完整备份,在做差备份
【注】设置备份时,基于第一次完整备份,恢复数据时,快速恢复。
一、备份流程:
1)备份周二:
1、添加数据:
# mysql -uroot -p’Huawei@123’ -e ‘insert into testdb.text values(2)’
2、修改时间:data 09020000
3、基于上次的完整备份,开始备份。
innobackupex --user=root --password='Huawei@123'
--incremental /xtrabackup/
--incremental-basedir=/xtrabackup/2017-09-01_00-00-04
4、查看备份数据:# ls /xtrabackup/
2)备份周三:
1、添加数据:
# mysql -uroot -p’Huawei@123’ -e ‘insert into testdb.text values(2)’
2、修改时间:data 09030000
3、基于上次的完整备份,开始备份。
innobackupex --user=root --password='Huawei@123'
--incremental /xtrabackup/
--incremental-basedir=/xtrabackup/2017-09-01_00-02-04
4、查看备份数据:ls /xtrabackup/
二、删库流程:
# systemctl stop mysqld
# rm -rf /var/lib/mysql/*
# rm -rf /var/log/mysqld.log
三、恢复流程:
1)生成回滚日志(指定回滚备份):
周一:innobackupex --apply-log --redo-only /xtrabackup/2017-09-01_00-00-04
周二: innobackupex --apply-log --redo-only /xtrabackup/2017-09-01_00-00-04 --incremental-dir=/xtrabackup/2017-09-02_00-00-26
2)恢复文件:
# innobackupex --copy-back /xtrabackup/2017-09-01_00-00-06
3)改变文件权限:# chown -R mysql.mysql /var/lib/mysql
4)开启MySQL:systemctl start mysqld
5)登录验证:
2、Mysqldump+binlog备份案例(8.0也可以用)
1)原理:锁表机制,可以做到热备
2)备份流程
1、执行备份:
[root@localhost ~]# mysqldump -p'Huawei@123' \
--all-databases --single-transaction \
--master-data=2 \
--flush-logs \
> /backup/`date +%F-%H`-mysql-all.sql //重定向
2、查看细节:
vim /backup/2016-11-25-14-mysql-all.sql
LOCK TABLES `user` WRITE; //观察各种锁记录,保证书一致性
3)删除数据流程
1、备份二进制日志文件:cp /var/lib/mysql/bin ~
2、停止MySQL、删库
# systemctl stop mysqld
# rm -rf /var/lib/mysql/*
3、启动数据库,改密码
# systemctl start mysqld
# grep 'password' /var/log/mysqld.log
# mysqladmin -uroot -p'Kyzw;u2dq<mh' password 'Huawei@1234'
4)恢复流程
1、MySQL恢复:
# mysql -p'Huawei@1234' < /backup/2016-12-08-04-mysql-all.sql
# mysql -p'Huawei@1234' -e 'flush privileges'
2、二进制日志恢复:
mysqlbinlog localhost-bin.000002 localhost-bin.000003
--start-position=154 | mysql -p'Huawei@123'
【注】localhost-bin.000003、start-position=154可以用 # show master status\G;自动生成日志位置。
3、记录的导入导出(8.0也可以用)
1)记录导出
1、修改配置文件–信任目录:
# vim /etc/my.cnf
Secure-file-priv=/backup //MySQL不信任该文件,重启MySQL。
# chown mysql.mysql /backup
2、导出文件到/backup:
# mysql> SELECT * FROM testdb1.t1 INTO OUTFILE '/backup/testdb1.t1.txt';
3、三种不同的文件导出方式:
# mysql -u root -p'Huawei@123' --html -e 'select * from testdb1.t1' > /backup/index.html
# mysql -u root -p'Huawei@123' --xml -e 'select * from testdb1.t1' > /backup/testdb1.t3.txt
# mysql -uroot -p'Huawei@123' -e 'select * from testdb1.t1' > /backup/testdb1.t2.txt
2)记录导入
1、修改权限:
# vim /etc/my.cnf
secure-file-priv=/backup //MySQL不信任该文件,重启MySQL程序
# chown mysql.mysql /backup
2、导入文件:
读取记录备份文件:
#LOAD DATA INFILE '/backup/testdb1.t1.txt' INTO TABLE testdb1.t1;
文章详细介绍了MySQL数据库的多种备份方法,包括使用mysqldump命令进行全量和部分备份,直接复制数据目录,以及Percona-xtrabackup工具进行完整、增量和差异备份。同时,文章也讨论了数据恢复的步骤,如使用mysql命令和直接复制数据目录恢复,以及数据迁移和表的导入导出操作。
1315

被折叠的 条评论
为什么被折叠?



