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<test_backup.sql
    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可对几百台mysql数据库服务器进行备份,监控,硬件,发生问题时飞信接口第一时间通知。 python语言,Django WEB页面 。
任何时候需要做好远程备份。
 
ibbackup  高性能热备方式
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。最大问题是读写磁头。
    随机访问会耗费长时间的磁头旋转和定位来查找,因此顺序的速度远高于随机访问 。  RAID提高数据库的性能,数据文件分布不同硬盘上达到负载均衡。
    固态硬盘,基于闪存,低延迟低功耗与防震,TB级别存储方案,无磁善头。闪存中数据是不可以更新的,只能通过扇区的覆盖重写,在处理前需要耗时的擦除操作。
    闪存的读写是非对称的,读远远快于写。
4.合理地设置RAID;
    RAID:增强数据集成度,增强容错功能,增加处理量或容量。
    RAID 0 :合并硬盘,无冗余,并行 I/O,速度最快。 如一个磁盘损坏,则所有数据丢失。
    RAID 1 :二组以上N个磁盘互为镜像,性能最高,主硬盘损坏时,镜像硬盘代替工作。数据安全性最高,但是磁盘利用率最低。
    RAID 5 :存储性能,数据安全和存储成本兼顾的解决方案。用Disk Striping(磁盘分区)技术。至少要三个硬盘。不备份,而是存储奇偶校验信息和数据分别存储不同硬盘,用剩下的数据及奇偶校验来恢复。
        与RAID0有相同的读速度,但是因奇偶较验,故写入慢。用write Back(将写入的数据放入自身的缓存中)可提高性能。
5.操作系统也很重要;
    OS,注意windows不区分大小写,而linux区分; 系统对内存的支持。
6.不同文件系统对数据库影响;   
    windows NTFS,Solaris ZFS,Linux EXT3/4等。
7.选择合适的基准测试工具。
    sysbench(CPU性能,磁盘IO性能,调度程序性能,内存分配及传输速度,POSIX线程性能,OLTP基准测试)

你可能感兴趣的:(mysql)