處理myloader匯入資料提示主鍵重複問題
將abc和abcb兩個庫的mydumper備份,利用myloader匯入abc資料庫時提示主鍵重複錯誤(很多表都有這個錯誤):
* (myloader:15557): CRITICAL **: Error restoring abcb.status_flow from file abcb.status_flow.sql: Duplicate entry '10203' for key 'PRIMARY'
** (myloader:15557): CRITICAL **: Error restoring abcb.task_creation_master from file abcb.task_creation_master.sql: Duplicate entry '280' for key 'PRIMARY'
匯入指令碼如下:
myloader -h localhost -P 3306 -u dba -p xxxx -S /tmp/mysql3306.sock -B abc -e -d /apps/mydumper_import/20171225010001 -o -t 8
版本:mariadb 10.1.18 + myloader 0.9.1
二.問題分析
從報錯來看提示主鍵重複,先想到的是原來的庫和表是否有drop掉,其實在匯入前已經做了drop操作,不存在有庫和表沒有drop掉的問題,而且檢查匯入命令是正常的。嘗試改成匯入abcb庫,同樣提示主鍵重複,如是猜測abc庫和abcb庫兩個庫的名字前三個字相同,會有衝突引起?或是兩個庫下有相同的表衝突引起?再檢查mydumper的備份檔案,果然發現兩個庫存在相同表名:
[email protected] 20171225010001]$ ls -al|grep status_flow
-rw-r--r--. 1 apps apps 1546 Dec 26 17:37 abcb.status_flow_detail-schema.sql
-rw-r--r--. 1 apps apps 162320 Dec 26 17:37 abcb.status_flow_detail.sql
-rw-r--r--. 1 apps apps 1509 Dec 26 17:37 abcb.status_flow-schema.sql
-rw-r--r--. 1 apps apps 19513 Dec 26 17:37 abcb.status_flow.sql
-rw-r--r--. 1 apps apps 1546 Dec 26 17:37 abc.status_flow_detail-schema.sql
-rw-r--r--. 1 apps apps 25078 Dec 26 17:37 abc.status_flow_detail.sql
-rw-r--r--. 1 apps apps 1509 Dec 26 17:37 abc.status_flow-schema.sql
-rw-r--r--. 1 apps apps 2825 Dec 26 17:37 abc.status_flow.sql
分別檢視abc和abcb下的status_flow表定義和結構都相同:
show create table abcb.status_flow\G
*************************** 1. row ***************************
Table: status_flow
Create Table: CREATE TABLE `status_flow` (
`........
PRIMARY KEY (`id`),
KEY `idx1` (`code`,`WCode`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
show create table abc.status_flow\G
*************************** 1. row ***************************
Table: status_flow
Create Table: CREATE TABLE `status_flow` (
.......
PRIMARY KEY (`id`),
KEY `idx1` (`code`,`WCode`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
所以猜測為myloader匯入時對兩個庫的相同表進行了重複匯入處理,所以報主鍵重複。
通過上面的對比分析,大致清楚報錯原因:
重新檢視一下-B引數的作用:
-B, --database An alternative database to restore into
在這裡的作用就是將來源多個庫合併匯入到-B後面的庫中。
三.問題解決
檢視myloader命令帶有的引數:myloader --help
Application Options:
-d, --directory Directory of the dump to import
-q, --queries-per-transaction Number of queries per transaction, default 1000
-o, --overwrite-tables Drop tables if they already exist
-B, --database An alternative database to restore into
-s, --source-db Database to restore
-e, --enable-binlog Enable binary logging of the restore data
-h, --host The host to connect to
-u, --user Username with privileges to run the dump
-p, --password User password
-P, --port TCP/IP port to connect to
-S, --socket UNIX domain socket file to use for connection
-t, --threads Number of threads to use, default 4
-C, --compress-protocol Use compression on the MySQL connection
-V, --version Show the program version and exit
-v, --verbose Verbosity of output, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2
發現-s引數可以指定來源資料庫名,所以用下面命令匯入後,問題不再發生:
myloader -h localhost -P 3306 -u dba -p xxxx -S /tmp/mysql3306.sock -s db1 -B db1 -e -d /apps/mydumper_import/20171225010001 -o -t 8
四.總結
當從來源多個庫匯入一個庫到目標mysql時,推薦-s和-B引數組合使用,且在從庫上設定複製過濾:set global replicate_do_db=abc.
相關推薦
處理myloader匯入資料提示主鍵重複問題
一.問題描述 將abc和abcb兩個庫的mydumper備份,利用myloader匯入abc資料庫時提示主鍵重複錯誤(很多表都有這個錯誤): * (myloader:15557): CRITICAL **: Error restoring abcb.status_flow
【mysql】sql刪除多個欄位重複資料有主鍵和沒主鍵解決方法
table user name age nub 張三 12 23 張三 12 23 張三 12 23 李四 13 21 李四 13 21 王五 11 25
MySQL 處理插入過程中的主鍵唯一鍵重複值辦法
介紹 本篇文章主要介紹在插入資料到表中遇到鍵重複避免插入重複值的處理方法,主要涉及到IGNORE,ON DUPLICATE KEY UPDATE,REPLACE;接下來就分別看看這三種方式的處理辦法。 IGNORE 使用ignore當插入的值遇到主鍵(PRIMARY KEY)或者唯一鍵(UNIQ
刪除資料表中的資料 讓主鍵id 從1開始自增
一、方法1 清空表資料並且將主鍵自增長從1開始 步驟①先清空表資料 步驟②在把表的自增長設定為1 Sql語句: DELETE FROM grade; ALTER TABLE grade AUTO_INCREMENT=1; 二、方法2
mybatis 插入資料返回主鍵id寫法
1、batis檔案中寫法: <!--插入資料,返回主鍵的insert寫法 --> <insert id="insert_A" parameterType="Map" useGeneratedKeys="t
oracle實現插入資料時主鍵自增
在看ORACLE_PL/SQL例項精解的時候用到了student表,需要自己建立。 1 首先是建表語句 create table student ( student_id number(8) not null primary key, --主鍵列 fi
Python-資料型別 主鍵auto_increment
1.詳細的建表語句 ***** create table 表名( 欄位名1 資料型別[(長度) 約束條件], 欄位名2 資料型別[(長度) 約束條件] ); 解釋: 型別:使用限制欄位必須以什麼樣的資料型別傳值 約束條件:約束條件是在型別之外新增一種額
(六)Mybatis插入資料返回主鍵id
整個demo放在Github上,地址:【https://github.com/Damaer/Mybatis-Learning】,專案是mybatis-05-CRUD,下載下來只需要maven環境以及mysql環境就可以跑起來,所以不貼全部程式碼。 我們知道很多時候我們有
Hibernate使用時提示主鍵不能為null的解決方法
之前用Hibernate時弄了很久都沒弄好,後來在網上看到別人說資料庫建表時,主鍵的標識增量要設定為1。就抱著試一試的心態試了一下,結果就能插入了。 資料庫建表時,主鍵的標識增量要設定為1 建表語句 CREATE TABLE table1&nb
關於Mybatis插入資料返回主鍵的小問題
1.在Mybatis Mapper檔案中新增屬性“useGeneratedKeys”和“keyProperty”,其中keyProperty是Java物件的屬性名,而不是表格的欄位名。 <insert id="insert" parameterType="Spare
mybatis 事務下獲取insert資料的主鍵[id]的值
現在有一個需求:表A 表B的資料,需要在同一個事務中操作。表A bid儲存的是表B的id。 表A:id[主鍵] , name , bid[表B的主鍵] 表B:id[主鍵] , name 就是先
MyBatis+Oracle用foreach標籤實現批量插入資料以及主鍵自增
1.前言 最近做一個批量匯入影像的需求,將多條記錄批量插入資料庫中。解決思路:在程式中封裝一個List集合物件,然後把該集合中的實體插入到資料庫中,因為專案使用了MyBatis,所以打算使用MyBatis的foreach功能進行批量插入。資料庫用的是Ora
mapper.xml檔案中獲取最新插入資料的主鍵
在開發過程中,我們常常用到在插入資料時,需要得到剛插入的資料的主鍵,MySQL中有以下做法: 1、推薦使用 <insert id="addVehicleParam" parameterType="com.corp.dto.VehicleParamAddDt
【Java】sql實現插入,插入值的主鍵自增,防止遷移資料時報主鍵衝突的錯誤;
一、問題 我們要自己造一些測試資料,並且這些SQL指令碼要遷移到其他環境,遷移過程中,如果主鍵寫死,在其他環境,可能會出現主鍵衝突;所以,我們要寫活的主鍵,實現起來也很簡單; 二、解決方法 insert into userInfo(id,name,age)val
【MyBatis框架點滴】——mybatis插入資料返回主鍵(mysql、oracle)
向資料庫中插入資料時,大多數情況都會使用自增列或者UUID做為主鍵。主鍵的值都是插入之前無法知道的,但很多情況下我們在插入資料後需要使用剛剛插入資料的主鍵,比如向兩張關聯表A、B中插入資料(A的
ABAP HASH TABLE 主鍵重複時
當定義內表為hashed table, unique key的時候,如果表裡已經存在一條記錄,你再insert相同主鍵的記錄進去的時候, 結果是insert失敗,SY-SUBRC = 4. 記錄也不會
MySQL:insert若主鍵重複則update
插入新紀錄,若存在則update已有記錄: replace into是若存在則把原紀錄刪除再插入,其他欄位會改變(按照新給的資料,若新紀錄中相應欄位沒提供則更新為預設值)。 insert into ...on duplicate key update是若存在則更新已有欄位,其他欄位不
jquery easyui datagrid 遠端載入資料----把主鍵渲染為值遇到的問題及解決方案
起因:資料庫中一些欄位存的是代表具體值的數字,需要渲染為具體值 monggodb中的字典 mysql中存放的值為:expertin代表教練擅長的搏擊技能 jquery easyui中的相關程式碼如下:用於載入字典中的資料,注意:這一ajax請求必須設定為同步(async:false),
[轉帖]如何準確高效的獲取資料庫新插入資料的主鍵id
原文地址 例如我們新建了一張表UserInformation,欄位如下Id,為主鍵,自增,其它欄位Name,Pwd,Email 然後我們來執行一個新增插入操作: insert into UserInformation(Name,Pwd,Email) values('小明','123','111') 我
python筆記6:資料處理之匯入資料
# -*- coding: utf-8 -*- #資料一般儲存在檔案(csv、txt、excel)和資料庫中 #1. 匯入csv檔案(第一行是列名) from pandas import read_csv #檔案的編碼格式也應該是 utf-8 才行,否則報錯 df = re