这个问题涉及mysql备份与复制和大量数据库的最佳做法。 我正在寻找你的观点和build议:)
我有两个数据库主/从(MySQL复制)在我的每个应用程序服务器上。 我有一个由客户和一个“pipe理”数据库的数据库。
目前我共有500个数据库,很快就会超过1K。
每个数据库包括大约100个表,目前,在mysqldump操作(未压缩)之后,我通过数据库到达10到30mo。
我现在正在考虑备份这些数据库。 主要目标是肯定能够解决服务器崩溃问题并构build灾难恢复stream程,但在此之前,我更担心自己的客户将自己的数据搞乱了。 总结一下,我希望能够:
1 – 备份位置
数据库的备份不应该在与数据库本身相同的服务器上完成。 由于我在两台不同的服务器上使用复制,您认为在另一台服务器上备份数据是一种很好的做法吗? 或者作为专用服务器的其他解决scheme是什么?为什么?
2 – 备份过程
首先,我将按照停止临时复制和“只读”备份的原则,从备份数据库进行备份。
我想我在这里考虑两种不同types的备份。 第一个备份将是原始数据文件的备份,我将每周执行说明(因为我正在使用复制,我很安全)。 而第二种types的备份将是每24小时执行一次的每个数据库的mysqldump。 这是否合乎逻辑?
还有其他要点我应该考虑吗? 增量备份是否对我有意思?
非常感谢!
最佳实践取决于您需要恢复的内容。 你一定要备份到不同的存储,理想情况下在不同的地理位置。 我有这个小脚本,它检测所有的数据库,并将每个数据库备份到分离的文件,所以我只能恢复一个数据库。
#!/bin/bash echo "Starting..." ROOTDIR="/backup/mysql/es2" YEAR=`date +%Y` MONTH=`date +%m` DAY=`date +%d` HOUR=`date +%H` SERVER="mysql.local" BLACKLIST="information_schema performance_schema" if [ ! -d "$ROOTDIR/$YEAR/$MONTH/$DAY/$HOUR" ]; then mkdir -p "$ROOTDIR/$YEAR/$MONTH/$DAY/$HOUR" fi echo "running dump" dblist=`mysql -u backuper -pXXXXXXXXXXX -h $SERVER -e "show databases" | sed -n '2,$ p'` for db in $dblist; do echo "Backuping $db" isBl=`echo $BLACKLIST |grep $db` if [ $? == 1 ]; then mysqldump --single-transaction -u backuper -pXXXXXXXXXX -h $SERVER $db | gzip --best > "$ROOTDIR/$YEAR/$MONTH/$DAY/$HOUR/$db.sql.gz" echo "Backup $db ends with return code $?" else echo "Database $db is on blacklist, skip" fi done echo "dump completed"
每个备份都保存在目录结构YEAR / MONTH / DAY / HOUR / DB_NAME.sql.gz中。 你可以在variablesBLACKLIST中指定你不想备份的数据库。