冷备份:
关闭mysql服务,拷贝所有库表文件。一般冷备份来备份所有库表数据。 通过监控,查看每天哪个时间在线用户最少。
/var/lib/mysql
myisam:
t1.frm 表结构
t1.MYD 表数据
t1.MYI 表索引
#对fdb1库备份
[root@Fox mysql]# /etc/init.d/mysqld stop
[root@Fox class]# cd /var/lib/mysql/db1/
[root@Fox db1]# scp -p t1.* 192.168.11.146:/tmp #拷贝到146上
[root@Client tmp]# mkdir /var/lib/mysql/bank #创建备份库
[root@Client tmp]# cp t1.* /var/lib/mysql/bank/ #拷贝到bank库下
[root@Client bank]# chmod 660 t1.* 修改权限和所有者
[root@Client bank]# chown mysql.mysql t1.*
[root@Client bank]# mysql -uroot -p112 #登录mysql查看
mysql> use bank #查看
mysql> show tables;
#对整个mysql数据库备份
[root@Fox lib]# /etc/init.d/mysqld stop
[root@Fox /]# mkdir back
[root@Fox /]# cp -a /var/lib/mysql/* ./back
[root@Fox lib]# zip -r back.zip back/ #打包
[root@Fox lib]# scp back.zip 10.1.1.2:/tmp
[root@Client tmp]# unzip back.zip -d /var/lib/mysql/ #解包
[root@Client tmp]# cd /var/lib/mysql/
[root@Client mysql]# rm -rf mysql/
[root@Client mysql]# mv back/* ./
[root@Client mysql]# rm -rf back/
[root@Client mysql]# cd db1/
[root@Client db1]# chown -R mysql.mysql ./*
[root@Client mysql]# /etc/init.d/mysqld resatrt
[root@Client mysql]# mysql -uroot -p112 #登录
mysql> show databases; #查看
Innodb: 需要备份以下文件
/var/lib/mysql/ibdata 数据和索引
ib_logfile0 ib_logfile1 日志
fox2.frm 表结构
热备份:
不关闭mysql服务,mysqldump
#备份同一个数据库中的多张表:
[root@Fox mysql]# mysqldump
Usage: mysqldump [OPTIONS] database [tables]
[root@Fox ~]# mysqldump -uroot -p112 -x db1 t1 t5 > /tmp/db1_t1_t5.bank
-x 读锁、备份过程中任何人可读不可修改
#备份多个库:
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
mysqldump -uroot -p112 -x --databases db1 mysql > /tmp/db_db1_mysql.sql
#备份所有库表:
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
[root@Fox ~]# mysqldump -uroot -p112 -x --all-databases > /tmp/all.sql
[root@Fox ~]# mysqldump -uroot -p112 -Ax > /tmp/all.sql
如果备份innodb表:
--single-transaction 替换 -x
还原 :
#同一个数据库中的多张表:
[root@Fox ~]#mysql -u root -p112 dbname < /tmp/db1_t1_t5.sql dbname库名
#多个库的还原:
[root@Fox ~]#mysql -uroot -p112 < /tmp/db_db1_mysql.sql
#所有库还原:
[root@Fox ~]#mysql -uroot -p112 < /tmp/all.sql
备份策略:
- 全备份:冷备份、热备份 可以选择一周一次、一天一次
- 增量备份 可以选择一天一次、一小时一次
mysql -uroot -pqwer -e 'flush logs;'
cp/scp 将备份文件保存到一个网络的日志备份机上。
找一个日志,将用户对数据库的修改【增、删、改】操作记录下来。以sql语句形式记录下来。这个日志称为: 二进制日志 log_bin
在/var/lib/mysql 下:
binlog.000001 binlog.000002....... 日志切割、每次重启、会生成一个
[root@Fox mysql]# mysqlbinlog binlog.000001 翻译二进制日志、可读
#at xx 是一条语句、at是起始位置、end_log_pos 结束位置。其中为第二行为开始时间。
开启二进制日志
[root@Fox ~]# vim /etc/my.cnf
#symbolic-links=0
log_bin=binlog 开启二进制日志。=日志名称
log_bin_index=binlog.index 二进制日志索引。=右边名字随便起、左边固定
重启mysql
通过binlog的日志位置号和起始时间进行数据还原。
1、
[root@Fox mysql]# mysqlbinlog binlog.000001 > /tmp/1.sq1 导出数据
[root@Fox mysql]# mysql -uroot -p112 < /tmp/1.sql 还原
2、通过位置号进行数据还原
[root@Fox]#mysqlbinlog --start-position='4' --stop-position='699' binlog.000004 > /tmp/1.sql
[root@Fox ]# mysql -uroot -p112 < /tmp/1.sql 还原
3、通过时间进行数据还原:
[root@Fox]#mysqlbinlog --start-date='2017-06-20 23:36:35 ' --stop-date='2017-06-20 23:44:25' binlog.000004 > /tmp/1.sql
[root@Fox mysql]# mysql -uroot -p112 < /tmp/1.sql 还原
or
mysqlbinlog --start-date='2017-06-20 23:36:35 ' --stop-date='2017-06-20 23:44:25' binlog.000004 | mysql -uroot -p112
日志切割方式:
1 、mysql重启自动切割
2 、通过sql命令:
mysql> flush logs; 切割生成新日志、之后对数据库的操作都记录在新日志里
flush privileges; 使update mysql.user生效
Vim /etc/my.cnf
sync_binlog=1 mysql缓存数据实时写入binlog中(保证数据安全、)
max_binlog_size=1G 达到1G自动切割binlog
binlog_do_db=mysql 只记录mysql库的修改操作 (与下二选一)
binlog_ignore_db=test 不记录test库的操作