- 备份Drupal sites目录并压缩
- 备份Drupal数据库并压缩
在运行脚本之前,要创建一个用于存放备份文件的目录,如SiteBackup,然后分别创建DB和Site目录分别用于存放数据库的Drupal程序文件。
脚本source code如下:
# Usage:# backup_drupal_db.ps1Write-Host "This script will backup&zip the drupal database and zip it."$site_name = "rzchina"$db_name = "rzchina"$drupal_site_dir = "C:\XAMPP\xampplite\htdocs\rzchina\sites"$target_db_dir = "C:\Users\example.net\Site-Backup\DB"$target_drupal_dir = "C:\Users\example.net\Site-Backup\Site"$mysql_bin_dir = "C:\XAMPP\xampplite\mysql\bin"$7zip_bin_dir = "C:\Program Files\7-Zip"$curr_dir = Get-Location$curr_date = date -format "yyyyMMdd-Hmss"# Backup database$target_db_filename = $target_db_dir + "\" + $db_name.ToString() + "_" +$curr_date.ToString()$sql_filename = $target_db_filename + ".sql"Write-Host "Start backup db..."cd $mysql_bin_dir./mysqldump -uroot -c -e --default-character-set=gbk --skip-set-charset --hex-blob $db_name > tmp_sqlget-content tmp_sql | set-content -encoding utf8 $sql_filenameWrite-Host "DB backup ended."# Zip db fileWrite-Host "Start zipping...";cd $7zip_bin_dir$zip_filename = $target_db_filename + ".7z"./7z.exe a $zip_filename $sql_filename# Clean upWrite-Host "Clean up..."del $sql_filename;# Zip Drupal Site File$zip_site_filename = $target_drupal_dir + "\" + $site_name + $curr_date.ToString() + ".7z";./7z.exe a $zip_site_filename $drupal_site_dirWrite-Host "The End."cd $curr_dir
由于是第一个脚本,因此略显幼稚,不过任务还完成的不错。接下来研究如何传递参数,实现更通用的脚本。
非常奇怪,我使用mysqldump备份的数据库,竟不能restore,总是提示字符错误。但打开导出的sql文件,里面的文字还都是正常的。有待进一步探索。我想可以先创建一个小数据库,然后通过mysqldump进行导出,并用mysql进行导入,如果正确,则可以说明一些问题。我怀疑是由于默认文件编码的问题。
回复删除研究发现,应该在mysqldump时,设置-default-character-set=gbk,以及--hex-blob,才能导出有效的sql脚本。
回复删除然后,导出的脚本通过mysql中的source可以restore数据库,通过phpmyadmin是不行的。
但导入成功后,通过phpmyadmin查看数据时,中文全都变成了乱码。
回复删除我怀疑是在mysql中,应设置character set为utf-8
回复删除将导出的sql脚本中:
回复删除-- MySQL dump 10.11
--
-- Host: localhost Database: rzchina
-- ------------------------------------------------------
-- Server version 5.0.67-community
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
将set names gbk 改为 set names utf8,就可以通过phpmyadmin正确导入了。
成功!
回复删除在导出sql时,skip SET NAMES,即可。
在get-content后通过set-content为其它编码的文件时,不能使用相同的文件名。 如 get-content $filename | set-content -encoding utf8 $filename是不行的。
回复删除