MySQL数据库子表分段备份的PHP实现
体积派生思想:统计变长sql语句,根据1个字符作为1字节比较,如果音量大于设定大小,写一个sql文件(我不知道这是否是统计方法,供其他人参考)。导入量的想法:按行读取sql文件,每行作为一个完整的SQL语句执行插入到数据库中的数组可以循环使用,但在创建表语句时,这需要单独处理(这花费了我很长时间);
< PHP
/ /宋政和转载请注明出处
(0)set_time_limit;
头('content-type:文本/ HTML;字符集= UTF-8);
mysql_connect('localhost ','root ','root);
mysql_select_db(测试);
$table_array=get_tables ('test');
mysql_query(让名字utf8);
文件大小=美元1024 * 1024 * 4;
美元开始_get {开始} =美元的美元_get {开始}:0;
部分_get { 'part美元美元美元的} _get { 'part}:1;
table_index美元_get { } =美元'table_index_get { }:美元'table_index '0';
美元美元美元table_index table_array表= { };
$ = 200000000;这个数字足够大,可以是记录的总数。
备份数据,美元=;
如果($开始= = '0'){
查询创建表;
结果= mysql_query美元($查询);
行= mysql_fetch_row美元($结果);
备份数据=下降美元如果存在` { $表} `;;$行{ 1 }。;
}
$极限=($开始= = '0'):限制美元美元开始,民;
从$ $限制中选择*;
结果= mysql_query美元($查询);
numfields = mysql_num_fields美元($结果); / /统计场数
而($行= mysql_fetch_row($结果)){
逗号=;
backupdata_tmp美元=插入` { $表} `值(;
为($我= 0;美元美元美元我<< numfields;i++){
backupdata_tmp美元= $逗号。。mysql_escape_string '($行{我});
逗号=;
}
backupdata_tmp美元;)。;
如果(strlen($备份数据)+ strlen($ backupdata_tmp)> $文件大小){
写文件和跳转
文件大小=数据。$表。' ' $部分。SQL;
file_put_contents(文件,备份数据,美元);
echo文件。'backup完成,程序继续!;
美元+;
段
表名
/开始点
跳转
睡眠(3);
;
出口;
}
备份数据,backupdata_tmp美元美元;
开始+ +;
}
如果($备份数据){
文件大小=数据。$表。' ' $部分。SQL;
file_put_contents(文件,备份数据,美元);
}
echo $表。'backup完了!;
睡眠(2);
table_index美元+ +;
如果($ table_array { $ table_index }){
;
出口;
其他{ }
祝贺您,数据库备份完成了!;
}
功能get_tables($ dB){
TQ = mysql_list_tables美元($分贝);
而(TR = mysql_fetch_row美元($ TQ)){
arrtb美元{ } = $ TR { 0 };
}
返回的arrtb;
}
>
以上是本文的全部内容,希望大家能喜欢。