mysql 快速导出_mysql 快速导入导出
隨著數據庫的數據越來越大,采用mysqldump 越來越慢,測試環境的機器配置不高,2G左右的數據導入進入像蝸牛一般,非常影響效率,這里采用一些改進的方法來比以前導入的速度提高好幾倍,但日常配備應有更好的策略(如:根據binlog來實現增量備份。)
這里只是幾個純粹的腳本,并且適用的數據庫也是數據量較小的數據庫,頻繁使用的話,可以再加以調整,實現更加自動化的方式。
下面直接貼腳本
1、先在生產數據庫服務器上,執行下面備份數據腳本
[root@MYSQL-M super_restore_database]# cat much_process_backup_database.sh
#!/bin/bash
db_name=your_db_name
db_date=`date +%Y-%m-%d`
bak_dir=/back/back_data_dir
if [ ! -d ${bak_dir}/${db_name} ];then
mkdir -p ${bak_dir}/${db_name}
fi
function start_much_process_back_table{
for table in `mysql -uroot -pPasswd $db_name -e show tables |grep -v Tables_in`
do
if [ -f /tmp/$table.txt ];then
rm -rf /tmp/$table.txt
fi
/usr/local/mysql/bin/mysql ?-uroot -pPasswd $db_name -e ?SELECT * INTO OUTFILE '/tmp/${table}.txt' ?FIELDS TERMINATED BY ',' ?LINES TERMINATED BY '/n' FROM ?$table;
done
}
function start_process{
while ((1))
do
if [ `ps -ef |grep ?mysql ?|grep -v grep | grep -v mysqld_safe | grep -v basedir|wc -l` -lt 1 ];then
# 這個判斷語句判斷導出進程是否存在,如果不存在則表示已經全部導出
echo starting to process.......
cd /tmp/
tar cvzf ${db_name}.${db_date}.tar.gz ?./*.txt ?rm -rf ./*.txt
echo process over....
mv ${db_name}.${db_date}.tar.gz $bak_dir/${db_name}
exit 0
else
echo not dump final....
sleep 5;sleep 5
fi
done
}
start_much_process_back_table
start_process
2、傳輸備份文件到測試數據庫服務器上采用scp ,這里省略
3、在測試數據庫上執行恢復腳本。
[root@MYSQL-MB super_restore_database]# cat much_process_restore_table.sh
#!/bin/bash
db_name=your_db_name
db_date=`date +%Y-%m-%d`
bak_dir=/back/back_data_dir
tar_file=${bak_dir}/${db_name}/$db_name.${db_date}.tar.gz
if [ ! -d ${bak_dir}/${db_name} ];then
mkdir -p ${bak_dir}/${db_name}
scp ? 192.168.1.33:${bak_dir}/${db_name}/$db_name.${db_date}.tar.gz ? ${bak_dir}/${db_name}
fi
if [ -f ${tar_file} ];then
cd ${bak_dir}/${db_name}
tar zvxf $db_name.${db_date}.tar.gz
fi
function start_restore_table{
for table in `mysql -uroot -pcrhAdmin $db_name -e show tables |grep -v Tables_in`
do
/usr/local/mysql/bin/mysql -uroot -pPwd $db_name -e ?truncate table ?$table;
sleep 1 ;
/usr/local/mysql/bin/mysql -uroot -pPwd $db_name -e ?load data INFILE '${bak_dir}/${db_name}/$table.txt' into table $table ?FIELDS TERMINATED BY ',' LINES TERMINATED BY '/n';
done
}
function start_process{
while ((1))
do
if [ `ps -ef |grep ?mysql ?|grep -v grep | grep -v mysqld_safe | grep -v basedir|wc -l` -lt 1 ];then
echo load data file over... ?rm -rf ${bak_dir}/${db_name}/$table.txt
exit 0
else
echo not restore final....sleep 5;sleep 5
fi
done
}
start_restore_table
start_process
4、附加上一個 數據庫結構拷貝腳本
如果遠端數據庫可以連接,這個腳本直接連到遠端數據庫,導出數據庫結構,導入到本地數據庫,初始化數據庫結構,然后利用上面的導入導出腳本,可以快速導入導入。
[root@MYSQL-MB super_restore_database]# cat copy_database_structure.sh
#!/bin/bash
# copy one database structure ?to another database
# zhangkai@cairenhui.com 20120920
db_name=your_db_name
db_date=`date +%Y-%m-%d`
bak_dir=/back/back_data_dir
if [ ! -d ${bak_dir}/${db_name} ];then
mkdir -p ${bak_dir}/${db_name}
fi
function export_database_structure{
echo export the database ?structure......;
sleep 1
/usr/local/mysql/bin/mysqldump ?-hX.X.X.X ? -uroot -pPwd ?-d $db_name ?> ?${bak_dir}/${db_name}/${db_name}.S.sql
echo ?export ok....
}
function init_database_structure{
/usr/local/mysql/bin/mysql -uroot -pPwd -e drop database IF EXISTS $db_name
echo drop database ${db_name} ?over......;
sleep 1
/usr/local/mysql/bin/mysql -uroot -pPwd -e create database $db_name
echo create database ${db_name} ok ......;
sleep 1
/usr/local/mysql/bin/mysql -uroot -pPwd ?$db_name < ${bak_dir}/${db_name}/${db_name}.S.sql
echo import database ${db_name} structure ok......;
sleep 1
}
export_database_structure
init_database_structure
總結
以上是生活随笔為你收集整理的mysql 快速导出_mysql 快速导入导出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 顶级程序员的心得–Coders at W
- 下一篇: oracle 创建模式语句,ORACLE