使用 PHP 批量单独导出 MySQL 数据库文件
原理
- 使用
mysql
命令获取数据库信息 - 清洗、过滤数据
- 使用
mysqldump
命令进行导出
代码
dump_database.php
<?php
/**
* 使用 PHP 批量单独导出 MySQL 数据库文件
*/
define('USERNAME', 'root'); // MySQL用户名
define('PASSWORD', 'root'); // MySQL密码
$result = shell_exec(sprintf('mysql -u%s -p%s -e "show databases;"', USERNAME, PASSWORD));
$rowArr = explode("\n", $result);
// 过滤
if ($rowArr[0] == 'Database') unset($rowArr[0]); // 忽略表头
$dbNameList = array_filter($rowArr, function($dbName) {
$ignoreList = ['information_schema', 'mysql', 'performance_schema', 'sys', 'test']; // 忽略的数据库列表
$dbName = trim($dbName);
return empty($dbName) || in_array($dbName, $ignoreList) ? false : true;
});
$dbNameList = array_merge($dbNameList, []); // 重排key下标
// 导出
for ($i=0; $i < count($dbNameList); $i++) {
$dbName = $dbNameList[$i];
echo sprintf("进度:%d/%d %s\n", $i+1, count($dbNameList), $dbName);
$result = shell_exec(sprintf('mysqldump -u%s -p%s %s > %s.sql', USERNAME, PASSWORD, $dbName, $dbName));
}
使用
- 把源码保存到 php 文件(eg:
dump_database.php
) - 配置 MySQL 的用户名和密码
- 运行
php dump_database.php
数据库对应的 .sql 文件
会保存在运行目录
附
使用 mysqldump
命令导出全部数据库到一个 .sql
文件
mysqldump -uroot -p --all-databases > sqlfile.sql