shell&&mysqldump 导出数据库结构并且导入到新数据库(合并数据)

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值