备份函数和触发器
mysqldump --master-data=2 --single-transaction -R --triggers -A > all.sql
其中--master-data=2代表备份时刻记录master的Binlog位置和Position,--single-transaction意思是获取一致性快照,
-R意思是备份存储过程和函数,--triggres的意思是备份触发器,-A代表备份所有的库

查看主库备份时的binlog名称和位置,MASTER_LOG_FILE和MASTER_LOG_POS:
head -n 30 all.sql | grep 'CHANGE MASTER TO'
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000010', MASTER_LOG_POS=112;

mysql < /data/all.sql

============================================
备份分为冷备和热备

冷备份
因为mysql中库即目录(database is folder)所以冷备份其实就是备份整个目录。
停掉mysql服务,直接将当前目录(/var/lib/mysql)下的东西都拷贝到其他地方就行,恢复的时候直接拷回来就行了,并且将所
有者和组都改为musql。备份还原都需要需要停止服务
myisam engine 的将目录直接拷贝(三个文件  xt701.frm记录表结构 xt701.myd 存放数据  xt701.myi 存放索引)
innodb engine的需要将innodb及相关日志文件考走,不考日志恢复的时候起不来服务

热备份
mysql自带mysqldump command
备份mysqldump -u root -p xxxx xt701 > xt701.bak.sql  这里的xt701是库名

还原
先去数据库建立同名库 xt701
mysql -u root -p xxx < xt701.bak.sql

第三方软件
mydumper soft

mysqldump

Usage: mysqldump [OPTIONS] database [tables]
OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR     mysqldump [OPTIONS] --all-databases [OPTIONS]

全备
[root@convirt tmp]# mysqldump -A -x > quanbei.sql

备份某个库
[root@convirt tmp]# mysqldump vfast > vvv.sql
[root@convirt tmp]# mysqldump --databases vfast > /opt/5.sql

备份单表  vfast库的T6表
mysqldump -x vfast T6 > /opt/t6.sql

vfast库名
恢复单个库
1)先去建库
2)导入备份文件

mysql> create database vfast;
Query OK, 1 row affected (0.00 sec)

mysql> exit
Bye
[root@convirt tmp]# mysql vfast < vvv.sql
#同时备份多个库  vfast  and test
[root@instructor ~]# mysqldump --database vfast test > /opt/backup/vfast_no2.sql

增量备份单表 

[root@convirt tmp]#   mysqldump --lock-tables --flush-logs --master-data=1 vfast test > /opt/1.sql
or
[root@convirt tmp]#  mysqldump --lock-tables --flush-logs --master-data=2 vfast test > /opt/3.sql
mysql> flush logs; 结束当前binlog开启新binlog

导出单个数据表结构和数据
mysqldump -h localhost -uroot -p123456  database table > dump.sql
mysqldump test H1 > 1.sql  到处test库H1表数据

备份表结构
[root@convirt tmp]# mysqldump --no-data --databases vfast > bb.sql

恢复

[root@convirt tmp]# mysql -u root -p [database name]  < [backup file name]


基于日志备份
vim /etc/my.cnf
log-bin=binlog  启用二进制日志
log-bin-index=binlog.index  建立二进制日志索引
sync-binlog=1 (1代表立刻写到磁盘,0代表先在内存后写到磁盘)

expire_logs_days=10  binlog 日志文件10天过期
max_binlog_size=2G 指定binlog大小
binlog_do_db = 库名  指定只记录那个库的binlog

如何删除binlog
mysql> show master logs; 显示本机binlog
mysql> purge binary logs to 'binlog.000004'; 删除前3个

二进制日志 备份与恢复

参考日志http://www.jb51.net/article/45023.htm
定义条件截断binlog日志
例如恢复到binlog.000003
mysqlbinlog /var/lib/mysql/binlog.000003 |mysql
将binlog 日志导出成sql语句
mysqlbinlog /var/lib/mysql/binlog.000007 > 7.sql

同时导入多个binlog二进制日志
mysqlbinlog /var/lib/mysql/binlog.[0-10]* > 7.sql
--start-datatime 和--stop-datatime 选项可以用来指定从二进制日志的某个时间点来进行恢复。
-–start-position=#               指定开始和结束position
-–stop-position=# 

[root@convirt mysql]#  /usr/local/mysql/bin/mysqlbinlog --start-position=370 --stop-position=440  
/var/lib/mysql/mysql-bin.000002

--start-position=370 --stop-position=440 这里面数字从哪儿来的呢?
[root@convirt mysql]#  mysqlbinlog /usr/local/mysql/bin/mysqlbinlog

# at 370
#100929 21:35:25 server id 1  end_log_pos 440 Query    thread_id=1    exec_time=0    error_code=0
SET TIMESTAMP=1285767325/*!*/;

从某个时间点开始还原【不需要提前删表】
mysqlbinlog binlog.[0-10]* --start-datetime="2014-03-02 10:30:00" |mysql

导入到某个时间点之前 【先删表,后还原】
mysqlbinlog /var/lib/mysql/binlog.[0-7]* --stop-datetime="2014-02-26 11:38:58" |mysql

results matching ""

    No results matching ""