学习了几天mysql的知识。刚接触单单以为是语法之类的命令记住就行了。但是遇到问题的时候缺不知道从何下手。网上找了相关的资料感觉还是不太实用。于是笔者就着手总结了备份与还原的例子。这篇是mysqldump的使用。进行了2个事例的操作。当然两个事例大同小异。第二个为第一个的拓展。如果将这2个例子原理搞清楚了。接下来进行LVM备份还原以及Xtrabackup这个备份工具都会轻松很多。
[root@localhost ~]# mysql
mysql> FLUSH TABLES WITH READ LOCK; ##以只读的方式进行锁表
mysql> FLUSH LOGS; ##滚动日志
mysql> SHOW BINARY LOGS; ##查看
[root@localhost ~]# mysqldump -uroot -p --master-data=2 jiaowu > /root/jiaowu-`date +%F-%H-%M-%S`.sql
mysql> DROP DATABASE jiaowu; ##模拟的
mysql> CREATE DATABASE jiaowu;
mysql> \q
[root@localhost ~]# mysql -uroot -p jiaowu <jiaowu-2013-05-04-19-18-18.sql
[root@localhost ~]# mysql -uroot -p <increment-1.sql
备份单个数据库,或库中特定表
mysqldump DB_NAME [tb1] [tb2]
--master-data={0|1|2}
0: 不记录二进制文件及路位置;
1:以CHANGE MASTER TO的方式记录位置,可用于恢复后直接启动从服务器;
2:以CHANGE MASTER TO的方式记录位置,但默认为被注释;
--lock-all-tables: 锁定所有表,这样就不用单独开一个xshel去执行mysql的锁表操作了;
--flush-logs:执行日志flush;
如果指定库中的表类型均为InnoDB, 可使用
--single-transaction 启动热备 不要和lock-all-tables共用
备份多个库:
--all-databases: 备份所有库
--databases DB_NAME, DB_NAME,...: 备份指定库
--event 备份事件
--routines备份存储过程和存储函数
--triggers备份触发器的
#mysqldump -uroot -p --master-data=2 --flush-logs --all-databases --lock-all-tables > /root/alldatabases.sql
查看备份到的内容中 --master的masterlog的位子。清空(删掉)以前的(当然备份走也行,万一到什么时候用得到呢)
mysql> PURGE BINARY LOGS TO 'mysql_bin.********';
mysql> SHOW BINARYLOG;
mysql> FLUSH LOGS; ##滚动下,前边的是周一的
然后cd /mydata/data下
找到昨天的mysql_bin.*******然后复制走。或者# mysqlbinlog mysql-bin.***** > /root/1-incremental.sql
so这里我们模仿坏掉了,事先mysqld stop停掉他。去数据库删掉里面的东西(当然要把当谈的mysql-bin******+1给保存出来。(我们平常的生产生活中二进制文件和数据库文件肯定要分开放的亲!安全保险!)
我们这个时候要重新去你安装的mysql文件夹中执行下初始化脚本(编译安装过程中的,当然这里不能解释啦),scripts/mysql_install_db --user=mysql--datadir=/mydata/data/
然后启动服务
#mysql -uroot -p <alldataases.sql(这个时候可以进入查看下)
还原增量备份 ##这里执行之前需要在mysql>中执行set sql_log_bin = 0挂掉二进制,等到还原结束后在set sql_log_bin =1 开启。
mysql <1-incremental.sql ##去查看 ,
然后还原周二的操作
仿照周一的操作二进制文件各种~