用PHP备份MySQL数据库最简单的方法就是用mysqldump命令,通过PHP的exec或shell_exec函数来执行它。比如,写一个PHP脚本,里面放着这样的代码:$backup_file = 'backup-' . date('Y-m-d-H-i-s') . '.sql'; $command = "mysqldump --user=你的用户名 --password=你的密码 --host=localhost 你的数据库名 > " . $backup_file; shell_exec($command); 这样就能生成一个.sql文件,里面全是数据库的数据和结构。数据安全的话,把备份文件存到安全的地方,比如加密它,或者上传到云存储如阿里云OSS。自动化呢,用Linux的crontab定时运行这个PHP脚本,比如每天凌晨2点执行php /path/to/backup.php。
第一条来源:CSDN博客经验分享
我写了个PHP备份脚本,超级简单有效。核心是用exec执行mysqldump:function backupDB(){ $dbname = 'mydatabase'; $user = 'root'; $pass = '123456'; $backup_file = "backup-" . date("YmdHis") . ".sql"; $cmd = "mysqldump -u$user -p$pass $dbname > $backup_file"; exec($cmd); echo "备份完成:" . $backup_file; } 每天用crontab 0 2 * * * /usr/bin/php /var/www/backup.php 自动跑,备份文件我传到百度云,安全又省心。遇到大数据库卡顿,就加--single-transaction参数,避免锁表。
第二条来源:SegmentFault用户帖子
PHP备份MySQL的最佳实践:先连mysqli,$conn = new mysqli('localhost','user','pass','db'); 然后用query执行SHOW TABLES,循环每个表dump数据。但推荐直接shell_exec('mysqldump -u user -p pass db | gzip > backup.sql.gz'); 压缩后体积小。安全技巧:备份文件权限设600,别让别人读;密码别硬编码,用环境变量$_ENV['DB_PASS']。自动化用wp-cron或system cron,每周全量+每天增量,增量用--where='updated > LAST_BACKUP_TIME'。
第三条来源:知乎回答实操
实际项目中,我用PHP写了个类来备份:class DBBackup { private $host, $user, $pass, $db; public function __construct($h,$u,$p,$d){ $this->host=$h; ... } public function backup(){ $file = '/backups/' . time() . '.sql'; $cmd = sprintf('mysqldump -h%s -u%s -p%s %s > %s', $this->host, $this->user, $this->pass, $this->db, $file); return shell_exec($cmd); } } 调用$backup = new DBBackup(...); $backup->backup(); 安全上,用scp传到远程服务器,自动化cron job:*/5 * * * * php backup.php && scp backup.sql user@remote:/path。测试过10G数据库,半小时搞定。
第四条来源:博客园教程摘录
数据安全第一!备份后用openssl加密:shell_exec('openssl enc -aes-256-cbc -salt -in backup.sql -out backup.enc -k SECRETKEY'); 还原时解密。PHP脚本里加错误检查:if(exec($cmd,$output,$return_var) && $return_var==0){ //成功,上传到OSS }else{ mail('admin@email.com','备份失败'); } 自动化脚本放web目录外,crontab调用。增量备份用mysqldump --where="id > $last_id"。
第五条来源:PHP中文网论坛
简单粗暴: `date +%%Y%%m%%d`.sql"); ?> 保存为backup.php,chmod +x,crontab -e 加一行0 3 * * * /path/backup.php。安全:改mysqldump默认路径,避免命令注入;备份存/tmp后mv到/secure/backups并chmod 400。自动化完美,日志用file_put_contents加error_log。
FAQ
Q: 备份大数据库会不会卡网站?
A: 会,用--single-transaction --quick参数,mysqldump不会锁表,从库备份更好。
Q: 怎么只备份特定表?
A: mysqldump后加表名,如mysqldump db table1 table2 > backup.sql。
Q: 密码安全怎么搞?
A: 别写代码里,用.cnf文件存凭证或环境变量。
Q: 怎么恢复备份?
A: mysql -u user -p db < backup.sql,gzip的先gunzip。