MySQL数据库的备份与恢复

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:
+关注继续查看

MySQL数据库的备份与恢复

mysqdump工作原理

         利用mysqldump命令备份数据的过程,实际上就是把数据从mysql库里一逻辑的sql语句的形式直接输出或生成备份的文件的过程。

备份单个数据

mysql数据库自带了一个很好用的备份命令,就是mysqldump基本使用如下

语法:mysqldump -u 用户名 -p 数据库名  > 备份的文件名

1、备份数据并恢复:

mysqldump -uroot -p radius > /opt/mysql_bak.sql

还原数据库

mysql -uroot -p radius </opt/mysql_bak.sql

 

2、指定拉丁字符集备份数据库

mysqldump -uroot -p --default-character-set=latin1 radius > /opt/mysql_bak.sql

还原数据库

mysql -uroot -p radius </opt/mysql_bak.sql

 

3、备份时加参数(-B)     #会在备份时增加创建数据库连接数据的语句

mysqldump -uroot -p -B radius > /opt/mysql_bak_B.sql

还原数据库

mysql -uroot -p  </opt/mysql_bak_B.sq

 

4、压缩备份(用gzip对备份的数据压缩)

mysqldump -uroot -p -B radius|gzip >/opt/mysq_bak.sql.gz

 

5、查看备份内容

egrep -v "#|\*|--|^$" /opt/mysql_bak.sql

 

root@solin:~# mysql -uroot -p -e "select id,username,is_superuser,last_login from radius.auth_user;"

Enter password:

+----+----------+--------------+---------------------+

| id | username | is_superuser | last_login          |

+----+----------+--------------+---------------------+

|  1 | root     |            1 | 2016-11-25 03:26:43 |

|  2 | WeiFei   |            0 | NULL                |

+----+----------+--------------+---------------------+

备份多个库

1、同时备份mysqlradius

mysqldump -uroot -p -B radius mysql|gzip >/opt/mul.bak.sql.gz

提示:-B

      表示连接多个库,并增加use db和create database db的命令信息

2、备份所有的库(-A备份所有的库)

mysqldump -uroot -p -A -B |gzip >/opt/a.sql.gz

 

3、利用source命令恢复数据库

进入数据库控制台,mysql -uroot -p登陆后

msyql>use 数据库

然后使用source命令,后面参数为数据文件

例:root@solin:/opt# mysql -uroot -p

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 251

Server version: 5.6.28-0solin0.15.04.1 (Solin)

 

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

 

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

 

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

+--------------------+

1 row in set (0.00 sec)

 

mysql> system ls /opt

a.sql  mysql.sql.gz  radius_t.sql.gz  shop.sql

bak    radius.sql    shop_shop.sql

mysql> source a.sql;

Query OK, 0 rows affected (0.00 sec)

 

Query OK, 0 rows affected (0.00 sec)

 

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

 

Query OK, 0 rows affected (0.00 sec)

 

Query OK, 0 rows affected (0.00 sec)

 

mysql> show database;

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'database' at line 1

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| radius             |

+--------------------+

3 rows in set (0.00 sec)

 

mysql> \q

Bye

 

分库备份

企业的数据库会有很多库,出问题可能是某一个库,如果在备份时把所有的库备份成一个数据文件的,恢复某一个库时会较麻烦,这是就用到了分库备份。

1、命令行分库备份

root@solin:~# mysql -uroot -p -e "show databases;"|grep -Evi "database|infor|perfor"|sed -r 's#^([a-z].*$)#mysqldump -uroot -p -B \1|gzip >/opt/bak/\1.sql.gz#g'|bash

Enter password:

root@solin:~# ls /opt/bak/

mysql.sql.gz  radius.sql.gz

2for循环实现分库备份

[root@solin scripts]# cat fenku.sh

#!/bin/sh

for dbname in `mysql -uroot -p'centos' -e "show databases;"|grep -Evi "database|info|perfor"`

do

    mysqldump -uroot -p'centos' --events -B $dbname|gzip >/opt/bak/${dbname}_bak.sql.gz

done

[root@solin scripts]# sh fenku.sh

[root@solin scripts]# ls /opt/bak/

mysql_bak.sql.gz  solin_gbk_bak.sql.gz  solin_utf8_bak.sql.gz  test_bak.sql.gz

分库备份还原

[root@solin ~]# gzip -d /opt/bak/*

[root@solin ~]# cd /opt/bak/

[root@solin bak]# ls *.sql|sed 's#_bak.sql##g'

mysql

radius

[root@solin bak]# for dbname in `ls *.sql|sed 's#_bak.sql##g'`;do mysql -uroot -pbdyun < ${dbname}_bak.sql;done

Warning: Using a password on the command line interface can be insecure.

Warning: Using a password on the command line interface can be insecure.

[root@solin bak]#

备份表

1、备份单个表

语法:mysqldump -u用户名 -p 数据库名 表名>备份的文件名

例: mysqldump -u root -p radius shop_shop >/opt/shop_shop.sql

查看结果

root@solin:~# ls /opt/

bak  mysql.sql.gz  radius.sql.gz  shop_shop.sql

root@solin:~# egrep -v "#|\*|--|^$" /opt/shop_shop.sql

DROP TABLE IF EXISTS `shop_shop`;

CREATE TABLE `shop_shop` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `shopname` varchar(200) COLLATE utf8_unicode_ci NOT NULL,

  `contract_person_qq_number` varchar(50) COLLATE utf8_unicode_ci NOT NULL,

  `agent` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,

  `url` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,

……

2、备份多个表

语法:mysqldump -u用户名 -p 数据库名 表名表名2 >备份的文件名

例: root@solin:~# mysqldump -uroot -p radius shop_shop shop_shop_admins >/opt/shop.sql

Enter password:

root@solin:~# ls /opt/

bak  mysql.sql.gz  radius.sql.gz  shop_shop.sql  shop.sql

root@solin:~# egrep -v "#|\*|--|^$" /opt/shop.sql DROP TABLE IF EXISTS `shop_shop`;

CREATE TABLE `shop_shop` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `shopname` varchar(200) COLLATE utf8_unicode_ci NOT NULL,

  `contract_person_qq_number` varchar(50) COLLATE utf8_unicode_ci NOT NULL,

  `agent` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,

  `url` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,

  `address` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,

……

3、分库分表备份

mysqdump -uroot -p radius test >radius_test.sql

mysqdump -uroot -p radius test1 >radius_test2.sql

……

注:将上述命令放入一个脚本里就是脚本分表备份了,当然你也可以搜索其他更好的备份脚本,恢复时批量恢复多个SQl文件

 

备份数据库表结构和数据

1mysqldump -d参数只备份表的结构

root@solin:~# mysqldump -uroot -p -B -d radius >/opt/radius_d.sql.gz

Enter password:

root@solin:~# egrep -v "#|\*|--|^$" /opt/radius_d.sql.gz

USE `radius`;

DROP TABLE IF EXISTS `accounting_authconnectionhistory`;

CREATE TABLE `accounting_authconnectionhistory` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `wlanuserip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,

  `wlanacname` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,

  `wlanacip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,

  `ssid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,

……

2mysqldump -t参数只备份表的数据

例:root@solin:~# mysqldump -uroot -p -B -t radius >/opt/radius_t.sql.gz

Enter password:

root@solin:~# egrep -v "#|\*|--|^$" /opt/radius_t.sql.gz

USE `radius`;

LOCK TABLES `accounting_authconnectionhistory` WRITE;

UNLOCK TABLES;

LOCK TABLES `accounting_authconnectionuseronlinetimelist` WRITE;

UNLOCK TABLES;

LOCK TABLES `accounting_tempertoryalloweduserlist` WRITE;

UNLOCK TABLES;

LOCK TABLES `accounting_userrecord` WRITE;

UNLOCK TABLES;

LOCK TABLES `adminbd_adpullhistory` WRITE;

UNLOCK TABLES;

……

刷新、切割binlog

1、mysqldump -F参数刷新、切割binlog

2、mysqldump --master-data=1参数 找到binlog的文件和位置

mysqldump的关键参数说明

1-A备份所有库

2-B指定多个库,增加建表语句和use语句

3-F刷新binlog日志

4-d只备份表结构

5-t只备份表数据

6-x提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭--single-transaction --lock-tables 选项。

7-l --lock-tables 锁所有的表为只读

8--master-data增加binlog日志文件名及对应的位置点

9--compact去掉注释,适合调试输出(生产环境不用)

10--singe-transaction 适合innodb事物数据库备份

 

生产场景备份

1、常规备份

myisam备份:

mysqldump -uroot -p -A -B --master-data=2 -x |gzip >/opt/all.sql.gz

 

innodb备份:

mysqldump -uroot -p -A -B --master-data=2 --singe-transaction|gzip >/opt/all.sql.gz

2、专业DBA mysqldump备份演练

wKiom1g_iXKiIlZdAAL0PtQOrKc169.png










本文转自 运维小当家 51CTO博客,原文链接:http://blog.51cto.com/solin/1878387,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
11月前
|
存储 关系型数据库 MySQL
MySQL数据库系列(七)-------日志管理、备份与恢复
MySQL 的日志默认保存位置为/usr/local/mysql/data MySQL 的日志配置文件为 /etc/my.cnf,里面有个[mysqld]项。
123 0
MySQL数据库系列(七)-------日志管理、备份与恢复
|
12月前
|
存储 SQL 运维
大数据运维之MySQL备份及恢复
能够防止由于机械故障以及人为误操作带来的数据丢失,例如将数据库文件保存在了其它地方。 冗余: 数据有多份冗余,但不等备份,只能防止机械故障还来的数据丢失,例如主备模式、数据库集群。
188 0
大数据运维之MySQL备份及恢复
|
12月前
|
存储 SQL 安全
Mysql数据库的备份与恢复
Mysql数据库的备份与恢复
105 0
Mysql数据库的备份与恢复
|
关系型数据库 MySQL 数据库
MySQL数据库的备份与恢复(下)
一、数据备份的重要性 备份的主要目的是灾难恢复。 在生产环境中,数据的安全性至关重要。 任何数据的丢失都可能产生严重的后果。
122 0
|
安全 关系型数据库 MySQL
MySQL数据库的备份与恢复(中)
一、数据备份的重要性 备份的主要目的是灾难恢复。 在生产环境中,数据的安全性至关重要。 任何数据的丢失都可能产生严重的后果。
175 0
|
SQL 关系型数据库 MySQL
MySQL数据库的备份与恢复(上)
一、数据备份的重要性 备份的主要目的是灾难恢复。 在生产环境中,数据的安全性至关重要。 任何数据的丢失都可能产生严重的后果。
160 0
|
SQL 运维 关系型数据库
只有MYSQL数据目录如何挂载恢复
在使用云服务器的很多场景下,如遇一些linux系统级别问题,比如系统文件丢失,kernel panic等,无法正常在已有的主机系统上恢复系统启动,且也无之前系统正常时间创建的系统盘快照,需要通过初始化系统盘来恢复系统。 但是这样操作后系统可以恢复登录,但原有的系统盘内搭建的服务比如mysql等服务需要重新搭建,那么重新搭建的mysql如何指认原有的数据库目录,如何进行导出数据,本文将详细说明下操作恢复方法。
只有MYSQL数据目录如何挂载恢复
|
SQL 运维 关系型数据库
MySQL误删恢复方法2
实际工作中总会发生数据误删除的场景,在没有备份情况下,如何快速恢复误删数据就显得非常重要。 本文基于MySQL的binlog日志机制,当日志格式设置为“binlog_format=ROW”时,记录一步一步手动解析binlog、恢复误删数据的全过程,供大家参考使用。
129 0
|
SQL Oracle 关系型数据库
MySQL误删恢复方法1
MySQL不同于oracle,没有闪回查询这类概念,但网上流传几个闪回的开源工具如 binglog2sql、MyFlash,可以使用binglog日志进行误操作数据的恢复。
109 0
|
SQL 存储 关系型数据库
MySQL中的日志管理 日志备份与恢复(二)
MySQL中的日志管理 日志备份与恢复(二)
98 0
MySQL中的日志管理 日志备份与恢复(二)
推荐文章
更多