mysql数据备份与恢复基础

mysqldump备份
备份所有库

[root@miles ~]#  mysqldump -uroot -pbeijing --socket=/data/mysql/mysql.sock --all-databases>/home/mysql/backup/all_db.sql
查看备份
[root@miles backup]# pwd
/home/mysql/backup
[root@miles backup]# ls -lth
total 920M
-rw-r--r--. 1 root root 277M Nov 23 11:26 all_db.sql

备份db1数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db1
...
[root@miles ~]# mysqldump -uroot -pbeijing --socket=/data/mysql/mysql.sock --databases db1>/home/mysql/backup/db1_db.sql

备份单个表

[root@miles ~]# mysqldump -uroot -pbeijing --socket=/data/mysql/mysql.sock db1 test>/home/mysql/backup/db1_test.sql

一致性备份
如果不是使用一致性备份的话,mysql会锁表。如果使用会单独开启一个事务,不会锁表,锁库

[root@miles ~]# mysqldump --single-transaction -uroot -pbeijing --socket=/data/mysql/mysql.sock --all-databases>/home/mysql/backup/all_db_trans.sql

远程备份

[root@m1 ~]# mysqldump -uroot -pbeijing -h192.168.137.20 -P3306 --all-databases > ./backup/remote_backupall.sql
-- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.
mysqldump: Got error: 1142: SELECT,LOCK TABL command denied to user 'root'@'192.168.137.10' for table 'cond_instances' when using LOCK TABLES
报错,添加参数--skip-lock-tables或--single-transaction即可
[root@m1 backup]# mysqldump -uroot -pbeijing -h192.168.137.20 -P3306 --skip-lock-tables --all-databases > /root/backup/remote_backupall_skip.sql
或
[root@m1 ~]# mysqldump -uroot -pbeijing -h192.168.137.20 -P3306 --single-transaction  --all-databases > ./backup/remote_backupall.sql 

导出数据为csv格式

[root@miles ~]# mysqldump --single-transaction -uroot -pbeijing --socket=/data/mysql/mysql.sock db1 test -T /tmp
查看导出数据,默认以制表符分隔
[root@miles tmp]# more test.sql
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `id` int(10) DEFAULT NULL,
  `name` varchar(30) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
[root@miles tmp]# more test.txt
1       zhangsan1
2       zhangsan2
3       zhangsan3

[root@miles ~]# mysqldump --single-transaction -uroot -pbeijing --socket=/data/mysql/mysql.sock --fields-terminated-by=, db1 test -T /tmp
查看导出数据,参数--fields-terminated-by指定分隔符为","
[root@miles tmp]# more test.txt
1,zhangsan1
2,zhangsan2
3,zhangsan3

xtrabackup备份
全量备份

[root@miles ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=beijing --socket=/data/mysql/mysql.sock /home/mysql/backup
...
151119 11:52:35 Executing UNLOCK TABLES
151119 11:52:35 All tables unlocked
151119 11:52:35 Backup created in directory '/home/mysql/backup/2015-11-19_11-52-27'
151119 11:52:35 [00] Writing backup-my.cnf
151119 11:52:35 [00]        ...done
151119 11:52:35 [00] Writing xtrabackup_info
151119 11:52:35 [00]        ...done
xtrabackup: Transaction log of lsn (832649524) to (832649524) was copied.
151119 11:52:35 completed OK!
查看备份信息
[root@miles 2015-11-20_11-34-42]# pwd
/home/mysql/backup/2015-11-20_11-34-42
[root@miles 2015-11-20_11-34-42]# du -sh *
4.0K    backup-my.cnf
73M     db1
18M     ibdata1
4.0K    log
1.1M    mysql
212K    performance_schema
116K    test
4.0K    xtrabackup_checkpoints
4.0K    xtrabackup_info
4.0K    xtrabackup_logfile

增量备份

首先新增一些数据
mysql> use test;
Database changed
mysql> show tables;
Empty set (0.00 sec)
mysql> create table t(id int(10),name varchar(30));
Query OK, 0 rows affected (0.02 sec)

mysql> insert into t values(1,'zhangsan');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t values(2,'zhangsan2');
Query OK, 1 row affected (0.01 sec)

mysql> insert into t values(3,'zhangsan3');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t values(4,'zhangsan4');
Query OK, 1 row affected (0.01 sec)

mysql> insert into t values(5,'zhangsan5');
Query OK, 1 row affected (0.01 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

开始增量备份
--incremental 表明当前备份为增量备份
--incremental-dir 指定上次备份的路径
[root@miles 2015-11-19_11-52-27]#innobackupex --defaults-file=/etc/my.cnf --user=root --password=beijing --incremental /home/mysql/backup  --incremental-basedir=/home/mysql/backup/2015-11-20_11-34-42
...
151120 11:57:28 Executing UNLOCK TABLES
151120 11:57:28 All tables unlocked
151120 11:57:28 Backup created in directory '/home/mysql/backup/2015-11-20_11-57-24'
151120 11:57:28 [00] Writing backup-my.cnf
151120 11:57:28 [00]        ...done
151120 11:57:28 [00] Writing xtrabackup_info
151120 11:57:28 [00]        ...done
xtrabackup: Transaction log of lsn (71789633) to (71789633) was copied.
151120 11:57:28 completed OK!
查看备份信息,可见增量备份
[root@miles backup]# du -sh *
92M     2015-11-20_11-34-42
2.0M    2015-11-20_11-57-24

流式备份

[root@miles mysql]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=beijing --stream=xbstream /home/mysql/backup/ > /home/mysql/backup/stream.bak
查看备份信息
[root@miles backup]# ls -lh
...
-rw-r--r--. 1 root root  92M Nov 20 14:26 stream.bak

并行备份

[root@miles mysql]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=beijing --parallel=4 /home/mysql/backup/
...
151120 15:44:20 Executing UNLOCK TABLES
151120 15:44:20 All tables unlocked
151120 15:44:20 Backup created in directory '/home/mysql/backup//2015-11-20_15-44-18'
151120 15:44:20 [00] Writing backup-my.cnf
151120 15:44:20 [00]        ...done
151120 15:44:20 [00] Writing xtrabackup_info
151120 15:44:20 [00]        ...done
xtrabackup: Transaction log of lsn (71789633) to (71789633) was copied.

限速备份
–throttle=10 表示10M/s的限速

[root@miles tpcc]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=beijing --throttle=10 /home/mysql/backup/
通过iosstat命令查看io状态
[root@miles backup]# iostat -dmx 1

压缩备份

[root@miles tpcc]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=beijing --compress --compress-threads 4 /home/mysql/backup/
效果对比
[root@miles backup]# du -sh *
448M    2015-11-20_16-25-42
278M    2015-11-20_17-14-10

mysqlbinlog

[mysql@miles mysql]$ mysqlbinlog -vv binlog.000002
...
BEGIN
/*!*/;
# at 174
#151124 17:11:48 server id 1  end_log_pos 274   Query   thread_id=1     exec_time=0     error_code=0
use `db1`/*!*/;
SET TIMESTAMP=1448356308/*!*/;
insert into test values(4,'zhangsan4')
/*!*/;
# at 274
#151124 17:11:48 server id 1  end_log_pos 301   Xid = 11
COMMIT/*!*/;
# at 301
#151124 17:11:58 server id 1  end_log_pos 368   Query   thread_id=1     exec_time=0     error_code=0
SET TIMESTAMP=1448356318/*!*/;
BEGIN
/*!*/;
# at 368
#151124 17:11:58 server id 1  end_log_pos 468   Query   thread_id=1     exec_time=0     error_code=0
SET TIMESTAMP=1448356318/*!*/;
insert into test values(5,'zhangsan5')
/*!*/;
# at 468
#151124 17:11:58 server id 1  end_log_pos 495   Xid = 12
COMMIT/*!*/;
# at 495
#151124 17:12:10 server id 1  end_log_pos 562   Query   thread_id=1     exec_time=0     error_code=0
SET TIMESTAMP=1448356330/*!*/;
BEGIN
/*!*/;
# at 562
#151124 17:12:10 server id 1  end_log_pos 651   Query   thread_id=1     exec_time=0     error_code=0
SET TIMESTAMP=1448356330/*!*/;
delete from test where id=7
/*!*/;
# at 651
#151124 17:12:10 server id 1  end_log_pos 678   Xid = 13
COMMIT/*!*/;
...

binlog恢复实验

查看当前binlog状态
mysql> show master status;
+---------------+----------+--------------+------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| binlog.000003 |      868 |              |                  |
+---------------+----------+--------------+------------------+
1 row in set (0.00 sec)

插入并提交实验数据
mysql> select * from test;
Empty set (0.00 sec)

mysql> insert into test values (1,'M1'),(2,'M2'),(3,'M3'),(4,'M4'),(5,'M5'),(6,'M6'),(7,'M7'),(8,'M8'),(9,'M9'),(10,'M10');
Query OK, 10 rows affected (0.01 sec)
Records: 10  Duplicates: 0  Warnings: 0

mysql> select * from test;
+------+------+
| id   | name |
+------+------+
|    1 | M1   |
|    2 | M2   |
|    3 | M3   |
|    4 | M4   |
|    5 | M5   |
|    6 | M6   |
|    7 | M7   |
|    8 | M8   |
|    9 | M9   |
|   10 | M10  |
+------+------+
10 rows in set (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.01 sec)

mysql> show master status;
+---------------+----------+--------------+------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| binlog.000003 |     1139 |              |                  |
+---------------+----------+--------------+------------------+
1 row in set (0.00 sec)

删除实验数据
mysql> delete from test;
Query OK, 10 rows affected (0.07 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

恢复删除数据
[root@miles ~]# mysqlbinlog --start-position=868 --stop-position=1139 /data/mysql/binlog.000003 | mysql -uroot -pbeijing

mysql> select * from test;
+------+------+
| id   | name |
+------+------+
|    1 | M1   |
|    2 | M2   |
|    3 | M3   |
|    4 | M4   |
|    5 | M5   |
|    6 | M6   |
|    7 | M7   |
|    8 | M8   |
|    9 | M9   |
|   10 | M10  |
+------+------+
10 rows in set (0.00 sec)
时间: 2024-10-18 13:38:05

mysql数据备份与恢复基础的相关文章

mysql数据备份与恢复的几种方式

mysqldump 命令模式 备份IP为192.168.1.100某个库:  代码如下 复制代码 D:/APM/APMServ5.2.6/MySQL5.1/bin> mysqldump -h 192.168.1.100 -u root -p ucenter >d:/sql/uc_20130306.sql Enter password: **** 备份某个库下的某个表:  代码如下 复制代码 mysqldump -u root -p密码 dbname tablename>d:/test.s

将OICQ数据转成MYSQL数据_php基础

This file is /tmp/phpBeoJQ5 .  ################# You can copy this code to test #################   <?  include("include/dbclass.inc"); //可以用 MYSQL.INC 类代替测试  $q = new DB_Sql;   $db = $q->Database; //define the database  mysql_connect('loc

PHP添加MySQL数据记录代码_php基础

首先建立查询页面:  复制代码 代码如下: <html>  <head>  </head>  <body>  <h3>添加记录</h3>  <form action="add_finish.php" method="POST">  员工姓名:<input type="text" size=25 name="ename" value=&qu

详解PHP显示MySQL数据的三种方法_php基础

  昨天的程序是这样的: <?php  $link=mysql_connect("localhost","root","之前的管理员密码");  if(!$link) echo "没有连接成功!";  else echo "连接成功!";  mysql_select_db("infosystem", $link);  $q = "SELECT * FROM info&qu

【大数据新手上路】“零基础”系列课程--MySQL 数据整库迁移到 MaxCompute

随着公司业务的增多,云数据库 RDS 下的 MySQL 数据库的表越来越多,想要把它全部迁移到 MaxCompute 中进行计算分析,但又愁要配置太多次同步任务.如何能将大量的数据表一次性上传到 MaxCompute 中呢?通过大数据开发套件的整库迁移功能,便可快速完成 MySQL 数据整库迁移到 MaxCompute,从而节省同步时间,提高工作效率. 下面介绍一个适用于中小企业用户,高效率低成本的数据同步方案: 对于自建或云数据库 RDS 的 MySQL 数据库中的数据,都可以通过整库迁移功能

Linux下实现MySQL数据备份和恢复的命令使用全攻略_Mysql

为了保障数据的安全,需要定期对数据进行备份.备份的方式有很多种,效果也不一样.一旦数据库中的数据出现了错误,就需要使用备份好的数据进行还原恢复.从而将损失降到最低.下面我们来了解一下MySQL常见的有三种备份恢复方式: 1.利用Mysqldump+二进制日志实现备份 2.利用LVM快照+二进制日志实现备份 3.使用Xtrabackup备份 一:实验环境介绍: 系统介绍:CentOS6.4_X64 数据库版本:mysql-5.5.33 二:基于Mysqldump命令实现备份恢复 2.1.思路概念

使用Solr索引MySQL数据

环境搭建 1.到apache下载solr,地址:http://mirrors.hust.edu.cn/apache/lucene/solr/ 2.解压到某个目录 3.cd into D:\Solr\solr-4.10.3\example 4.Execute the server by "java -jar startup.jar"Solr会自动运行在自带的Jetty上 5.访问http://localhost:8983/solr/#/ PS:solr-5.0 以上默认对schema的管

备份宝让企业数据备份与恢复更容易

   息化时代是什么决定了企业的生死存亡?是资金吗?还是人才?资金没了可以去融资,人才走了可以再招聘,就算公司破产了,也有被收购重组的可能.然而,企业数据一旦丢失殆尽,那么,这个企业将很难获得东山再起的机会.美国9.11恐怖袭击中近三分之二企业因重要数据受损而不得不宣布破产就很好的证明了企业数据备份与恢复的重要性. 然而,企业数据备份说起来简单,真正实施的时候却不是那么容易,难点不少. [难点一]:前期采购成本太高 实现对企业数据的备份与管理势必会增加企业的成本.大公司普遍都建有自己的信息中心,

如何快速扩展MySQL数据量?

在一些评估里,我们(Pinterest)的发展比先前任何初创公司都要快.大约在2011年9月份,我们的基础设施都超过负载.一些NoSQL技术导致灾难性的后果,同时大量用于读的MySQL从属服务器,产生了大量令人恼火的Bug,特别是缓存.我们重新架构了整个存储模型.令人欣喜的是,新架构还是比较有效果的,基本满足了我们的要求.     1 业务需求  系统总体要非常稳定,便于操作,便于拓展.我们想让数据库能从开始小存储量,能随着业务发展而拓展: Pin友生成的内容必须能永久访问: (支持)请求的N个