MySQL的备份包括逻辑备份和物理备份
逻辑备份是指备份产生数据的语句,如CREATE DATABASE,CREATE TABLE和INSERT,把这些语句导出,然后存储到一个脚本中。恢复时,把这个脚本导入到数据库。有很强的兼容性,甚至可以跨平台备份和恢复。
物理备份指把对应的数据库文件拷贝到其他地方。可以跨平台备份和恢复。
MySQL的备份也可以分为完全备份,增量备份等
MySQL的备份分为热备份(Hot backup,支持读和写),温备份(Warm backup,只支持读),冷备份(Cold backup ,不支持读和写)
备份内容:二进制日志(主要用于增量备份,或建立从服务器),InnoDB日志文件(用于物理备份),MySQL的配置文件(如/etc/my.cnf),从服务器的上的slave position information 和relay logs ,及数据库本身。
备份工具:mysqldump (逻辑备份工具),SELECT INTO OUTFILE(逻辑备份工具),mk-parallel-backup(可以实现并行备份,要求cpu是多核的,第三方工具),ibbackup(专用于INNODB),BACKUP(MySQL 6.0以上才有此工具),Snapshot,mysqlhotcopy(MyISAM)
 mysqldump命令
       db_name[tb1][tb2] 指定数据库中的表 
       --all-databases   备份所有数据库
       --databases      指定数据库
       --events         导出 CREATE EVENT语句
       --extended-insert 
       --flush-logs      用于日志滚动
       --insert-ignore    用insert-ignore代替insert
       --lock-all-tables   锁定所有表
       --lock-tables      锁定某一表
       --master-data=n   导出二进制文件名称和位置,n=1时,改变主服务器,n=2时,不再改变主服务器
       --no-data        不备份数据
--opt         等同于同时添加 --add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset 选项。本选项能让 mysqldump 很快的导出数据,并且导出的数据能很快导回。该选项默认开启,但可以用 --skip-opt 禁用
       --replace        用REPLACE代替INSERT,由插入语句改为替换语句
       --routines       导出自定义函数和存储过程
       --single-transaction 在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如 InnoDB 和 BD                                                 
       --triggers           导出触发器,该选项默认启用,用 --ski禁用它p-triggers 
       --where         指定导出表中的哪些数据
如:mysqldump --databases mysql test > test.sql;
    mysqldump mysql --where=”name=’user’” >test.sql;
在很多情况下需要用到管理员账号和密码,如:
    mysqldump -uroot –p --all-databases > dump.sql;
    mysqldump -uroot -p mydb t1 > mydb.sql;
恢复和还原:
方式1>mysql -uroot –p db_name < db.name.sql
   方式2>SOURCE /tmp/db_name.sql;
SELECT INTO OUTFILE 命令:
   如:SELECT * INTO OUTFILE ‘/tmp/t1.txt’ FROM t1; 
     恢复: LOAD DATA INFILE  ‘/tmp/t1.txt’ INTO TABLE t1;
mk-parallel-dump 命令:(http://www.maatkit.org/)
 使用方式 mk-parallel-dump --basedir=/backups
      恢复 mk-parallel-restore /backups
文件系统快照(file system snapshot)
mysqlhotcopy 命令:
   --addtodest 把备份结果添加到某一目录下
   --allowold   如果该目录已存在,就把原目录重命名,放到一旁
   --checkpoint=db_name.table_name  
  --dryrun      测试
   --flushlogs   日志滚动
   --keepold    不删除原有的备份文件
   --method    取值cp或scp,可以远程备份
   --regexp     支持正则表达式选择匹配的数据库或表
   --resetmaster 表被锁定后,运行 RESET MASTER命令,重新设置二进制日志
   --resetsalve   表被锁定后,运行 RESET SLAVE命令
如:    mysqlhotcopy     mydb     /backup
       mysqlhotcopy    --method=scp   mydb   [email protected]:/backup 备份到远程主机
  
恢复与还原
mysqlhotcopy备份出来的是整个数据库目录,使用时可以直接拷贝到 mysqld 指定的 datadir (在这里是 /usr/local/mysql/data/)目录下即可,要注意权限的问题
cp  –rf  db_name /usr/local/mysql/data/
chown -R nobody:nobody /usr/local/mysql/data/ (将 db_name 目录的属主改成 mysqld 运行用户)
 
 
 
MySQL的还原:
     mysqlbinlog
       --start-datetime=”date_time”
       --stop-datetime=”date_time”
       --start-position=start_log_position
       --stop-position=stop_log_position
1>时间点还原
 1)还原整个数据库
 2)还原二进制日志(以数字结尾),按顺序还原
        mysqlbinlog mysql-bin.000003 > mysql-bin.000003.sql
        mysqlbinlog –stop-datetime=’2009-08-20 15:42:48’ mysql-bin.000002 > mysql-bin.000002.sql
 replication (复制)
MySQL支持两种复制,基于语句复制(MySQL 3.23 后)和基于行的复制(MySQL 5.1后)
为何使用复制
 1 数据的异地分布 2本地服务器平衡 3 备份 4 高可用和故障转移 5 测试升级
 replication 工作
1) 主服务器记录数据到二进制日志
2) 从服务器复制此二进制日志到重置日志(Relay log)
3) 从服务器把重置日志写入数据库
 主服务器:
mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO test@’192.168.0.%’ IDENTIFIED BY ‘password’;
       log_bin =mysql-bin
       server_id =10
重新启动MySQL
mysql> SHOW MASTER STATUS;
   从服务器:
            log_bin =mysql-bin
        server_id =2
        relay_log =mysql-relay-bin
        log_slave_updates =1
        read_only =1
       mysql>CHANG MASTER TO MASTER_HOST=’server1’,
           ->MASTER_USER=’test’,
           ->MASTER_PASSWORD=’password’,
           ->MASTER_LOG_FILE=’mysql-bin.000001’,
           ->MASTER_LOG_POS=0;
        SHOW SLAVE STATUS\G
        start slave