Mysql备份恢复调优
Mysql 备份与恢复
mysqldump,ibbackup,replication
备份分:
Hot Backup(热备) 在线备份,对DB无影响
Cold Backup(冷备) 停止时备份,简单,拷贝物理文件,离线备份
frm
数据库文件,共享表空间文件,独立表空间ibd文件,重做日志文件的备份 。 DBA脚本备份,并打包与压缩。
Warm Backup(温备) DB运行时备份,对DB操作有影响,会加一个全局读锁来保证备份数据的一致性。
逻辑备份是指备份文件内容是可读的,通常是文本文件,内容一般为SQL语句,可表的实际数据,如mysqldump和select * into OUTFILE。用于数据库升级,迁移,恢复时间较长。
mysqldump --all-databases > file_name ;备份所有数据库
mysqldump --databases db1 db2 db3 >dbs.sql ;备份指定的库
mysqldump --single-transaction test>test_backup.sql; 对test架构进行备份。
select * into OUTFILE ;多用于导出表的数据;
select * into outfile 'xxxx' from a; 恢复时用 load data infile 'xxx' into table a;
恢复
mysql -uroot -p
ibbackup 高性能热备方式
source ....xxx.sql
mysql 可以导出存储过程,触发器,事件,数据,但是不能导出视图。
文件备份,指拷贝数据库物理文件,DB可在运行或者停止状态。
完全备份 完整备份
增量备份 在上次完全备份的基础上对更新数据进行备份。
日志备份 对二进制日志备份。它的replication原理就是异步实时进行二进制日志重做。
[mysqld]
log-bin 开启二进制
sync_binlog=1
innodb_support_xa=1
要恢复二进制日志简单
mysqlbinlog binlog.000001 | mysql -uroot -p test
mysqlbinlog binlog.[0-10]* | mysql -uroot -p test 恢复多个
mysqldump中通过添加 -single-transaction选项来取得一致性备份。备份是在一个很长的事务中执行的。
根据自己的策略编写一个备份的应用程序,可以方便地设置备份的方法及监控备份的结果,且可通过第三方接口实时通知DBA,这样可做到24*7的备份监控。
DAO(Database Admin Online)系统,DBA可对几百台my
sql数据库服务器进行备份,监控,硬件,发生问题时飞信接口第一时间通知。 python语言,Django WEB页面 。
任何时候需要做好远程备份。
XtraBackup GPL2 免费 linux
LVM(Logical Volume Manager,GNU/Linux 逻辑卷管理器)对磁盘分区管理,可将多个磁盘分区建立一个卷组(Volume Group),成为统一的结构。再做LVM快照,非常快。
数据分布 复制不需要太多的带宽。
读取负载平衡 多个从服务器,通过DNS的Round-Robin和Linux的LVS实现负载均衡;
复制对备份很有帮助,但是不是备份,不能完全代替备份;通过复制建立的从有助于故障转移,减少故障的停机时间与恢复时间。
但是担心主上对数据的误操作,这时从也跟着处理了,这种情况无法处理。需要对从进行快照处理。从服务器上可以设置权限。
调优
1.选择合适的CPU;
OLTP 对CPU要求不高,复杂的查询需要的比较,排序,连接等耗CPU操作少。OLAP是CPU密集型的操作。OLTP是I/O密集型操作。
2.内存重要;
Percona 的Vadim 对内存的影响作了比较,内存大小最能直接反映数据库的性能。2GB->22GB 缓冲池的增大,性能极大提升。
mysql> show global status like 'innodb%read%';\G
+---------------------------------------+---------+
| Variable_name | Value |
+---------------------------------------+---------+
| Innodb_buffer_pool_read_ahead_rnd | 0 |
| Innodb_buffer_pool_read_ahead | 0 | 从物理磁盘预读的次数
| Innodb_buffer_pool_read_ahead_evicted | 0 | 预计的页,但是没有被读取就从缓冲池中被替换的页的数量,一般用来判断预读的效率
| Innodb_buffer_pool_read_requests | 6592 | 从缓冲池中读取页的次数
| Innodb_buffer_pool_reads | 396 | 从物理磁盘读取页的次数
| Innodb_data_pending_reads | 0 |
| Innodb_data_read | 8671232 | 总共读入的字节数
| Innodb_data_reads | 408 | 发起读取请求的次数,每次读取可能需要读取多个页。
| Innodb_pages_read | 395 |
| Innodb_rows_read | 0 |
+---------------------------------------+---------+
通常缓冲池的命中率不应该小于99%。即使缓冲池的大小大于数据库文件大小,也并不意味着无磁盘读写了。缓冲池只用来存放热点数据。
缓冲池的命中率 = Innodb_buffer_pool_read_requests/(Innodb_buffer_pool_read_requests+Innodb_buffer_pool_read_ahead +Innodb_buffer_pool_reads )
平均每次读取的字节数=Innodb_data_read/Innodb_data_reads
3.硬盘对数据库性能影响;
当前大多为传统的机械硬盘,此技术十分成熟,SAS或SATA接口硬盘。二个指标:寻道时间与转速。3ms的最短寻道时间,15000 rpm。最大问题是读写磁头。
随机访问会耗费长时间