一、前提条件 首先,需要设定一个同步的环境出来,可以在两个独立的主机或者同一个主机上实现,详细请参考 MySQL做同步实例。接下来的备份工作就都是在 Slave上实现了。 下面就拿一个实际的例子来讲解,MySQL Slave的版本为 5.0.27。 假定 datadir 为 /usr/local/mysql/data,备份文件存放目录为 /backup/mysql/,两种备份都由 shell脚本来自动完成。 二、全量备份 全量备份的原理是停止 slave之后,将数据刷新到磁盘中,然后直接拷贝数据文件。如果数据量相对较小,推荐使用 mysqldump来做,较大的话,直接拷贝文件就更便捷了。 shell脚本文件名 backupmysql_fullly.sh: 1. #!/bin/sh 2. 3. # 4. 5. # created by yejr,2006/11/29 6. 7. # 8. 9. # 本脚本用于定期做全量备份,备份的对象是slave 上的全部数据 10. 11. # 每次备份之前都先执行"STOP SLAVE; FLUSH TABLES;",然后将 12. 13. # 所有文件拷贝到备份目录下 14. 15. # 16. 17. #取得当前日期,作为备份目录名 18. 19. today=`date +"%Y_%m_%d"` 20. 21. #源目录 22. 23. datadir=/usr/local/mysql/data 24. 25. #目标目录 26. 27. bkdir=/backup/mysql 28. 29. today_bkdir=$bkdir/$today 30. 31. today_full_bkdir=$today_bkdir/full_backup 32. 33. #修改上级目录属性 34. 35. chattr -i $bkdir 36. 37. #判断目标目录是否已经存在 38. 39. if [ ! -d $today_bkdir ] ; then 40. 41. mkdir -p $today_bkdir 42. 43. else 44. 45. chattr -i $today_bkdir 46. 47. fi 48. 49. #执行 slave-stop && flush-logs,停止 slave,并且刷新缓存内容到磁盘 50. 51. mysqladmin -hlocalhost -uroot -ppasswd stop-slave 52. 53. mysqladmin -hlocalhost -uroot -ppasswd flush-tables 54. 55. cd $datadir 56. 57. #将ibdata*以及其它需要备份的数据库目录拷贝到目标目录下 58. 59. cp -rf ib* forum my.cnf mysql news yejr $today_full_bkdir/ 60. 61. #修改文件属主 62. 63. chown -R nobody:nobody $bkdir 64. 65. #执行 slave-start,启动 slave 66. 67. mysqladmin -hlocalhost -uroot -ppasswd start-slave 68. 69. #删除过期文件 70. 71. cd $bkdir 72. 73. #找出 6 天前创建的目录 74. ...