跨伺服器備份 還原MySQL表

2021-06-19 06:25:22 字數 1594 閱讀 7454

login_db和user_db分布在2臺mysql伺服器。uin和username的對應關係存放在user_db,login_db只有uin。

所以匯出login流水時,無法直接關聯username,不方便。

因為對一致性沒有要求,不需要強同步。所以懶得費周章的去弄主從,網上找了下資料,實現方法so easy,在login_db上執行:

1、shell> mysqldump -h$user_db_svr_ip --add-drop-table -u$mysql_user $database_name $table_name1 

$table_name2

> result.sql

2、shell> mysql -u $mysql_user $database_name

< /data/result.sql

查好命令,寫個指令碼丟到crontab就好。先手動跑一次試試,結果遇到的報錯:

mysqldump: got error: 1044: access denied for user '$mysql_user

'@'$ip' to database '$database_name

' when doing lock tables

啥?!mysqldump備份時,還要鎖表?!

在生產環境鎖表可能帶來一堆麻煩事,怎麼破?

再次祭出大招:google,,,原來mysqldump可以加個引數:--single-transaction

下文翻譯自:

該選項設定事務隔離模式為repeatable read

,並在 dumping data 之前傳送乙個start transaction sql 的狀態到伺服器。該選項僅對事務表有用,如 innodb,因為dump資料庫的一致狀態時,start transaction 不會阻塞應用。

使用該選項時應牢記,只有 dump innodb表時會保持一致狀態。例如,dump 任何 myisam 或 memory表時,就算用了此選項,仍可改變狀態。

mysql 5.5.3以前的版本中,當 --single-transaction dump 進行時,確保有效的dump檔案(正確的表內容和二進位制日誌座標) ,沒有其他的連線應使用以下語句:alter table, create table, drop table, rename table, truncate table。a consistent read沒有被從這些狀態中隔離,所以在dump時使用前面的語句會導致mysqldump 執行 select 取到的內容包含不正確的資料或直接失敗。從mysql 5.5.3開始,metadata(元資料) locking可防止這種情況。

--single-transaction 和 --lock-tables 是互斥的,因為 lock tables 導致任何pending的事務被隱式的提交.

該選項不支援mysql 集群 tables,ndbcluster 儲存引擎僅支援 read_committed 事務隔離級別,不能保證結果的一致性。你應該總是使用 ndb 備份和還原。

dump大表時,結合 --single-transaction 和 --quick 選項。

mysql> select version();

好吧,mysql版本確實有點舊了,下次找個時間公升級5.6

sqlserver跨伺服器備份表資料

跨伺服器資料庫 資料查詢可以用 openrowset 用法如下 select into 表名 from openrowset sqloledb 資料庫ip 賬號 密碼 資料庫名稱.dbo.表名 如果發現下面錯誤 訊息 15281,級別 16,狀態 1,第 1 行 sql server 阻止了對元件 ...

Linux伺服器系統備份還原

利用tar指令對linux系統下面的檔案打包成為乙個壓縮檔案。tar cvpzf backup.tgz exclude proc exclude lost found exclude mnt exclude sys exclude media 利用scp命令進行不同伺服器間資料拷貝傳輸,只需在備份端...

mysql跨伺服器查詢

2013 8 22 10 34 發布者 天空之城 檢視 16547 摘要 本地mysql資料庫要訪問遠端mysql資料庫的表中的資料,必須通過federated儲存引擎來實現.有點類似oracle中的資料庫鏈結 dblink 要允許這個儲存引擎,當構建mysql時使用 with federated ...