我们有一个在 Ubuntu Server 上运行 LAMP 的具有完整 ssh 和 root 访问权限的虚拟服务器。
我办公室里有一台运行 Ubuntu 的小型计算机,但什么都没用。我想我应该用它来制作和存储我们的 MySQL 数据库备份(副本)。但是,我该如何备份我们的数据库呢?
MySQL Workbench 可以锁定表以避免错误,并具有许多其他功能,但是没有计划任何自动备份位。MySQL 转储器没有指定他们是否可以保持数据库的一致性。
本段信息来源:
当我有 SSH 访问权限时,我不明白在服务器上运行 php 脚本并通过电子邮件发送备份有什么意义。由于备份如此重要,我认为一定有一种我尚未找到的标准(或极好的)方法!
那么我该如何备份我们的数据呢?最好还有我们的用户、配置等等!
答案1
如果您在 Ubuntu 机器上安装了 MySQL,则可以执行以下操作:
假设虚拟 IP 为 10.1.2.30
您可以在 Ubuntu 机器上执行以下操作
BACKUP_FILE=/root/MySQLData.sql
MYSQL_HOST=10.1.2.30
MYSQL_USER=whateverusername
MYSQL_PASS=whateverpassword
MYSQL_CONN="-h${MYSQL_HOST} -u${MYSQL_USER} -p${MYSQL_PASS}"
mysqldump ${MYSQL_CONN} --all-databases > ${BACKUP_FILE}
你也可以在 Ubuntu 机器上执行这个 crontab
如果你正在寻找一致的 mysqldump,你可以
- 如果所有数据都是 InnoDB,请使用 --single-transaction 选项
- 如果所有数据都是 MyISAM,则
FLUSH TABLES WITH READ LOCK;
在数据库上运行 - 如果数据是 MyISAM 和 InnoDB 混合的,
FLUSH TABLES WITH READ LOCK;
则--single-transaction
在数据库上运行(参见我的帖子https://dba.stackexchange.com/questions/8587/mysql-db-backup-clusion-specific-tables/8613#8613了解一些关于脚本编写的想法)
试一试 !!!
答案2
将下面的脚本放在一个文件中并使其可执行使用(chmod u+v 文件名),然后在计算机上添加一个 crontab 条目@daily 文件名,它将转储并保留每周备份。
#!/bin/sh
eightdaysago=$(date --date='7 days ago' +%Y-%m-%d-%A)
rm -rf /backups/$eightdaysago
# Backup the mysql Databases
for database in $(mysql -u b4ckup -pd1psh1t --host server0.expatjob.net -e "show databases" | awk '{print $1}' | grep -v Database| grep -v information_schema | grep -v mysql | grep -v phpmyadmin | grep -v STATS)
do
ssh user@ip 'mysqladmin -u (user) -p(password) flush-hosts'
mysqldump -u (user) -p(password) --lock-tables=false --host ip $database > /backups/`date +\%Y-\%m-\%d`-`date +\%A`/$database.sql
done