• 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    导出数据库结构和数据到第三个数据库
    #!/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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70

    mysqldump -hXXX -P3306 -uroot -pXXX --insert-ignore=true --default-character-set=utf8 seer_default > C:\Users\cheche\Desktop\syncdata\1758.sql

  • 相关阅读:
    VPP DPDK,不是翻墙!!
    Java的抽象类 & 接口
    Grafana系列-统一展示-11-Logs Traces无缝跳转
    Docker 容器服务的注册、发现及Docker安全
    人工智能第2版学习——博弈中的搜索2
    杰理之立体声输入【篇】
    SpringBoot统一功能处理
    idea中maven plugin提示not found
    对于复杂的数学模型,怎样利用 MATLAB 的优化工具箱进行准确的参数估计和模型拟合?
    C++基本语法和注释
  • 原文地址:https://blog.csdn.net/ss977/article/details/126499835