1. 程式人生 > >mysql同一例項上將一個庫“克隆”到另一個庫

mysql同一例項上將一個庫“克隆”到另一個庫

一.需求背景
  將同一mysql例項上的md_ls庫複製一份新庫,新庫名為md_ls_s2。
  mariadb 10.1.16


二.匯出操作
對md_ls庫進行匯出操作
cd /apps/sh/tool
./mydumper --user=root --password='密碼' --long-query-guard=120 --socket /tmp/mysql3306.sock --database=md_ls
--outputdir=/apps/mysql_backup//mydumper/temp -t 8 --verbose=3 --logfile=/apps/mysql_backup//mydumper/temp/mydumper.log

三.建立新庫名
  create database md_ls_s2;

四.匯入操作
cd /apps/sh/tool
./myloader --user=root --password='密碼' -B md_ls_s2 -d /apps/mysql_backup/mydumper/temp
--socket /tmp/mysql3306.sock

報錯一:
* (myloader:14026): CRITICAL **: Error restoring md_ls_s2.bak_17030701_go_anto_quotation from file md_ls.bak_17030701_adc_quotation-schema.sql: Table

'bak_17030701_adc_quotation' already exists
原因分析:是由於前面有執行過匯入操作,雖然有報錯,但表結構是有匯入,所以下次再匯入時會提示表存在。
處理方法:將md_ls_s2庫drop,並重建後,重新匯入。

報錯二:
** (myloader:6931): CRITICAL **: Error restoring md_ls_s2.v_code_master from file md_ls.v_code_master-schema.sql.gz: Unknown storage engine 'MyISAM'
show variables like 'enforce_storage_engine';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| enforce_storage_engine | InnoDB |
+------------------------+--------+
1 row in set (0.00 sec)

將表的定義sql檔案更改為innodb:
 sed -i "s/)ENGINE=MyISAM;/)ENGINE=InnoDB;/g" *schema.sql

報錯三:
** (myloader:19641): CRITICAL **: Error restoring md_ls_s2.v_code_master from file md_ls.v_code_master-schema.sql: This table type requires a primary key

show variables like 'innodb_force_primary_key';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_force_primary_key | ON    |
+--------------------------+-------+

set global innodb_force_primary_key=off

再執行恢復成功。

後續建好帳號和授權,即可交付給開發。