PHP 备份 MySQL数据库
时间:2021-07-01 10:21:17
帮助过:2人阅读
set_time_limit(0
);
2
3
4 // 库名
5 $db = ‘dbname‘
;
6
7
8
9 /********** 连接 MySQL 数据库 **********/
10
11 $dsn = ‘mysql:dbname=‘.
$db.‘;host=127.0.0.1‘
;
12
13 $user = ‘root‘
;
14
15 $password = ‘root‘
;
16
17
18 try{
19
20 $pdo =
new PDO(
$dsn,
$user,
$password);
21
22 $pdo->
exec(‘SET NAMES UTF8‘
);
23
24 // 捕获异常
25 $pdo->setAttribute(PDO::ATTR_ERRMODE,2
);
26
27 }
catch(PDOException
$e){
28
29 echo ‘Error: ‘.
$e->
getMessage();
30
31 }
32
33 // 查询多条数据
34 function query(
$sql){
35
36 global $pdo;
37
38 $res =
$pdo->prepare(
$sql);
39 $res->
execute();
40 $data =
$res->fetchAll(PDO::
FETCH_ASSOC);
41
42 return $data;
43
44 }
45
46
47 /********** 备份代码 **********/
48
49
50 // 查询库下所有表名称
51 $sql =
sprintf(‘SHOW TABLES FROM %s‘,
$db);
52 $tablesData = query(
$sql);
53
54 // 库中是否有表
55 if(
count(
$tablesData) < 1
){
56
57 exit(
$db.‘ 库中没有数据表‘
);
58 }
59
60 // 备份存放路径
61 $dirPath = ‘backup‘
;
62
63 // 判断目录是否存在
64 if(!
file_exists(
$dirPath)){
65
66 $res =
mkdir(
$dirPath);
67 if(
$res !==
true){
68
69 exit(‘目录创建失败1‘
);
70 }
71 }
72
73 // 当前日期
74 $toDir =
date("Ymd",
time());
75
76 // 当前日期的备份目录
77 $toDir =
$dirPath.‘/‘.
$toDir;
78
79 // 当前日期目录是否存在
80 if(!
file_exists(
$toDir)){
81
82 // 创建以当前日期为名称的目录
83 $res =
mkdir(
$toDir);
84 if(
$res !==
true){
85
86 exit(‘目录创建失败2‘
);
87 }
88 }
89
90 // 如果目录存在 生成备份的文件名
91 if(
file_exists(
$toDir)){
92
93 $fileName =
$toDir.‘/‘.
date("Y-m-d_H-i-s",
time()).‘.sql‘
;
94
95 }
else{
96
97 exit(‘目录创建失败3‘
);
98 }
99
100 // 循环数据
101 foreach(
$tablesData as $key=>
$val){
102
103 // 表键名
104 $tableKey = ‘Tables_in_‘.
$db;
105
106 // 获取表结构
107 $sql =
sprintf(‘SHOW CREATE TABLE %s‘,
$val[
$tableKey]);
108 $tableBody[
$key] = query(
$sql);
109
110 // 写sql文件到本地 ( 写入表名称 )
111 error_log("\n\n\n# ".
$tableBody[
$key][0][‘Table‘],3,
$fileName);
112
113 // 如果存在则先删除表
114 $delTab = ‘DROP TABLE IF EXISTS `‘.
$tableBody[
$key][0][‘Table‘].‘`;‘
;
115 error_log("\n\n".
$delTab,3,
$fileName);
116
117 // 写入表结构 结尾多输出一个; ( 分号 sql的结束符 )
118 error_log("\n\n".
$tableBody[
$key][0][‘Create Table‘].";\n\n",3,
$fileName);
119
120 // 查询表数据
121 $sql =
sprintf(‘SELECT * FROM %s‘,
$val[
$tableKey]);
122 $tableData = query(
$sql);
123
124 // 循环表中每条数据
125 foreach(
$tableData as $k=>
$v){
126
127 $sqlHeadStr = ‘INSERT INTO ‘.
$val[
$tableKey];
128 $keyStr = ‘‘
;
129 $valStr = ‘‘
;
130
131 // 循环insert的键和值
132 foreach(
$v as $kk=>
$vv){
133
134 // 拼接键
135 $keyStr .= ‘`‘.
$kk.‘`,‘
;
136 // 拼接值
137 $valStr .= ‘\‘‘.
$vv.‘\‘,‘
;
138 }
139
140 // 去除右侧多余逗号
141 $keyStr =
trim(
$keyStr,","
);
142 $valStr =
trim(
$valStr,","
);
143
144 // 键值添加括号
145 $keyStr = ‘(‘.
$keyStr.‘)‘
;
146 $valStr = ‘(‘.
$valStr.‘)‘
;
147
148 // 拼接完整sql
149 $sqlStr =
$sqlHeadStr.
$keyStr.‘VALUES‘.
$valStr.‘;‘
;
150
151 // 写入 insert 语句到文件
152 error_log(
$sqlStr."\n",3,
$fileName);
153 }
154 }
155
156 echo ‘ok‘
;
157 exit;
PHP 备份 MySQL数据库
标签: