mysqldump 基础知识
参数
连接参数
1、-h, –host: 指定连接的服务器名称或者IP;
2、-P, –port=: 连接数据库监听的端口;
3、-u, –user: 指定连接的用户名;
4、-p, –password: 指定用户的密码,可以交互输入密码;
字符集
5、–default-character-set: 设置字符集,默认是UTF8。
导出参数
6、-A, –all-databases: 导出所有数据库。不过默认情况下是不会导出information_schema库。
7、-B, –databases: 导出指定的某个/或者某几个数据库,参数后面所有名字参量都被看作数据库名,包含CREATE DATABASE创建库的语句。
8、–tables: 导出指定表对象,参数格式为“库名 表名”,默认该参数将覆盖-B/–databases参数。
9、-w, –where: 只导出符合条件的记录。
10、-d, –no-data: 只导出表结构,不导出表数据。
11、-t, –no-create-info: 只导出数据,而不添加CREATE TABLE 语句。
12、-f, –force: 即使遇到SQL错误,也继续执行
13、-n, –no-create-db: 不生成建库的语句CREATE DATABASE … IF EXISTS,即使指定–all-databases或–databases这类参数。
14、–add-drop-database: 在任何创建库语句前,附加DROP DATABASE 语句。
15、–add-drop-table: 在任何创建表语句前,附加DROP TABLE语句。这个参数是默认启用状态,可以使用– skip-add-drop-table参数禁用该参数。
默认参数
–opt: 功能等同于同时指定了 –add-drop-table, –add-locks, –create-options, –quick, –extended-insert, –lock-tables, –set-charset, 以及 –disable-keys这些参数。默认就是启用状态。使用–skip-opt来禁用该参数。
–add-drop-table:在任何创建表语句前,附加DROP TABLE语句。
–add-locks:在生成的INSERT语句前附加LOCK语句
-l,–lock-tables: 默认参数,锁定读取的表对象,想导出一致性备份的话最后使用该参数,会导致无法对表执行写入操作。
-a,–create-options
-e, –extended-insert
-q, –quick
-K, –disable-keys
-Q, –quote-names
–dump-date
–ssl
–triggers
–tz-utc
导出数据库:
1、导出整个数据库:mysqldump -uroot -p dbname > xxx.sql
- 仅仅导出数据库结构:
mysqldump -uroot -p -d dbname > xxx.sql
- 仅仅导出数据库数据:
mysqldump -uroot -p -t dbname > xxx.sql
2、导出整个数据库
- 仅仅导出数据库结构:
mysqldump -uroot -p -d dbname tablename > xxx.sql
- 仅仅导出数据库数据:
mysqldump -uroot -p -t dbname tablename > xxx.sql
导入数据库:
执行sql文件:mysql -uroot -p dbname < xxx.sql
shell脚本
合并两个数据库到第三个数据库
#!/bin/bash
source /etc/profile
win_path='D:/mysql-8.0.28-winx64/bin'
linux_path='/usr/local/mysql/bin'
# 实际中可以换成source数据库的信息
sou_mysql_host='127.0.0.1'
sou_mysql_port='3306'
sou_mysql_user='root'
sou_mysql_pwd='cheche'
sou_mysql_db_name='db1' #第一个数数据库(仅支持一个数据库)
sou2_mysql_host='127.0.0.1'
sou2_mysql_port='3306'
sou2_mysql_user='root'
sou2_mysql_pwd='cheche'
sou2_mysql_db_name='db2' #第二个数据库(仅支持一个数据库)
sou_mysql_table_name=(
# 两张数据库中相同的表的名字
vin_vehicle_info_0
vin_vehicle_info_1
vin_vehicle_info_2
vin_vehicle_info_3
vin_vehicle_info_4
vin_vehicle_info_5
vin_vehicle_info_6
vin_vehicle_info_7
# 如果有其他表的话再添加就好了!可以同步多张相同的表!
)
# 实际中可以换成destination数据库的信息
des_mysql_host='127.0.0.1'
des_mysql_port='3306'
des_mysql_user='root'
des_mysql_pwd='cheche'
des_mysql_db_name='db3' #要导入的数据库(仅支持一个数据库)
#记得先同步表结构 不然会失败
# 存放sql文件与日志的目录
#sync_db_dir='C:/Users/cheche/Desktop/syncdata/'
#log_file='C:/Users/cheche/Desktop/logs/mysql_to_mysql.log'
sync_db_dir='./syncdata/'
log_file='./logs/mysql_to_mysql.log'
[ -d ./logs ] || mkdir ./logs
[ -d ./syncdata ] || mkdir ./syncdata
func_writeLog(){
local getString=$1
if [ $? -eq 0 ];then
echo "TIME:$(date +"%Y%m%d_%H:%M"),The ${getString}"
echo "TIME:$(date +"%Y%m%d_%H:%M"),The ${getString}" >>${log_file}
else
echo "TIME:$(date +"%Y%m%d_%H:%M"),The ${getString}"
echo "TIME:$(date +"%Y%m%d_%H:%M"),The ${getString}" >>${log_file}
fi
}
#导出db1每张表一个sql文件(数据结构+数据)
func_sourceBackupCmd(){
for tabname in $(echo ${sou_mysql_table_name[@]}|sed 's/ / /g');do
${win_path}/mysqldump.exe -h${sou_mysql_host} -P${sou_mysql_port} -u${sou_mysql_user} -p${sou_mysql_pwd} \
--insert-ignore=true \
--default-character-set=utf8 \
${sou_mysql_db_name} ${tabname} >${sync_db_dir}/${sou_mysql_db_name}_${tabname}.sql
func_writeLog "${sou_mysql_db_name}_${tabname}.sql backup ok"
done
}
#导出db2每张表一个sql文件(只有数据)
func_source2BackupCmd(){
for tabname in $(echo ${sou_mysql_table_name[@]}|sed 's/ / /g');do
${win_path}/mysqldump.exe -h${sou2_mysql_host} -P${sou2_mysql_port} -u${sou2_mysql_user} -p${sou2_mysql_pwd} \
--insert-ignore=true \
--default-character-set=utf8 \
-t ${sou2_mysql_db_name} ${tabname} >${sync_db_dir}/${sou2_mysql_db_name}_${tabname}.sql
func_writeLog "${sou2_mysql_db_name}_${tabname}.sql backup ok"
done
}
#导入到第三个数据库中
func_syncMysqlCmd(){
for sqlname in $(ls ${sync_db_dir}/*.sql);do
${win_path}/mysql.exe -h${des_mysql_host} -P${des_mysql_port} -u${des_mysql_user} -p${des_mysql_pwd} \
--default-character-set=utf8 ${des_mysql_db_name} < ${sqlname}
func_writeLog "${sqlname} load ok"
[ $? -eq 0 ] && rm -f ${sqlname}
func_writeLog "${sqlname} deleted ok"
done
}
main(){
func_sourceBackupCmd;
func_source2BackupCmd;
func_syncMysqlCmd;
}
main
导出数据库结构和数据到第三个数据库
#!/bin/bash
source /etc/profile
win_path='D:/mysql-8.0.28-winx64/bin'
linux_path='/usr/local/mysql/bin'
# 实际中可以换成source数据库的信息
sou_mysql_host='127.0.0.1'
sou_mysql_port='3306'
sou_mysql_user='root'
sou_mysql_pwd='cheche'
sou_mysql_db_name='seer_default' #第二个数据库(仅支持一个数据库)
database_name='seer_default'
# 实际中可以换成destination数据库的信息
des_mysql_host='39.107.45.104'
des_mysql_port='3306'
des_mysql_user='root'
des_mysql_pwd='fz0720'
des_mysql_db_name='seer_default' #要导入的数据库(仅支持一个数据库)
#记得先同步表结构 不然会失败
# 存放sql文件与日志的目录
#sync_db_dir='C:/Users/cheche/Desktop/syncdata/'
#log_file='C:/Users/cheche/Desktop/logs/mysql_to_mysql.log'
sync_db_dir='./syncdata/'
log_file='./logs/mysql_to_mysql.log'
[ -d ./logs ] || mkdir ./logs
[ -d ./syncdata ] || mkdir ./syncdata
func_writeLog(){
local getString=$1
if [ $? -eq 0 ];then
echo "TIME:$(date +"%Y%m%d_%H:%M"),The ${getString}"
echo "TIME:$(date +"%Y%m%d_%H:%M"),The ${getString}" >>${log_file}
else
echo "TIME:$(date +"%Y%m%d_%H:%M"),The ${getString}"
echo "TIME:$(date +"%Y%m%d_%H:%M"),The ${getString}" >>${log_file}
fi
}
#导出db1每张表一个sql文件(数据结构+数据)
func_sourceBackupCmd(){
for tabname in $(echo ${database_name});do
${win_path}/mysqldump.exe -h${sou_mysql_host} -P${sou_mysql_port} -u${sou_mysql_user} -p${sou_mysql_pwd} \
--insert-ignore=true \
--default-character-set=utf8 \
${sou_mysql_db_name} >${sync_db_dir}/${sou_mysql_db_name}_${tabname}.sql
func_writeLog "${sou_mysql_db_name}_${tabname}.sql backup ok"
done
}
#导入到目标数据库
func_syncMysqlCmd(){
for sqlname in $(ls ${sync_db_dir}/*.sql);do
${win_path}/mysql.exe -h${des_mysql_host} -P${des_mysql_port} -u${des_mysql_user} -p${des_mysql_pwd} \
--default-character-set=utf8 ${des_mysql_db_name} < ${sqlname}
func_writeLog "${sqlname} load ok"
[ $? -eq 0 ] && rm -f ${sqlname}
func_writeLog "${sqlname} deleted ok"
done
}
main(){
func_sourceBackupCmd;
func_syncMysqlCmd;
}
main
mysqldump -hXXX -P3306 -uroot -pXXX --insert-ignore=true --default-character-set=utf8 seer_default > C:\Users\cheche\Desktop\syncdata\1758.sql