mysqldump同步生產到生產資料

賀子_DBA時代發表於2020-03-23
1.如果需要從一個例項把資料倒進另一個生產的例項,那麼需要注意:使用一下語句dump出來!
mysqldump  -uroot  -p -t  --single-transaction=true  --skip-disable-keys=false  --add-locks=false --set-gtid-purged=off    -B liuwenhe   --tables  r >/data/backup/r.sql
註釋:
1)--set-gtid-purged=false  結果檔案中不加 SET @@GLOBAL.GTID_PURGED,防止執行報錯,因為reset master後才能執行SET @@GLOBAL.GTID_PURGED!
2)--skip-disable-keys=false 關閉ALTER TABLE `r` DISABLE KEYS這類的關閉索引鍵操作,否則線上可能索引失效!影響業務
3)--set-gtid-purged=false   結果檔案中不帶 SET @@SESSION.SQL_LOG_BIN= 0; 也就是說要寫binlog,否則不能同步到從庫!
4)--add-locks=false  不加 LOCK TABLES `acct_loan` WRITE; 尤其注意這個,lock之後,只能這個session來操作這個表,並且這個session還不能操作別的表,別的session不能操作該表,具體實驗過程:(pxc和簡單的主從是一樣的效果!)
(實驗1 關於 lock tables  r  write:
會話1:
root@localhost : liuwenhe 18:33:01>LOCK TABLES  r WRITE;
Query OK, 0 rows affected (0.00 sec)
root@localhost : liuwenhe 18:33:03>insert into   r  values (1000);  #可以操作r表,也可以檢視
Query OK, 1 row affected (0.00 sec)
root@localhost : liuwenhe 18:33:09>insert into   t  values (1000);   #該session不可以操作t表
ERROR 1100 (HY000): Table 't' was not locked with LOCK TABLES
root@localhost : liuwenhe 18:33:15>select count(*) from  t;            #該session不可以查詢別的表
ERROR 1100 (HY000): Table 't' was not locked with LOCK TABLES)
會話2:
root@localhost : liuwenhe 19:04:33>select count(*) from r;  #查詢等待,
root@localhost : liuwenhe 18:39:21>insert into  r  values(10);  #dml等待,發現其他session不能操作session1 鎖定的表!
root@localhost : liuwenhe 18:41:36>delete  from  yy2;   #發現會話2可以操作別的表
Query OK, 3 rows affected (0.04 sec)
oot@localhost : liuwenhe 19:05:32>select count(*) from yy2;    發現可讀取r之外的表!
實驗2 關於 lock  table  r read;
會話1:
root@localhost : liuwenhe 18:45:38> lock  table  r read;
Query OK, 0 rows affected (0.00 sec)
root@localhost : liuwenhe 18:47:17>select  count(*) from  t;   #發現不可以讀取r之外的表
ERROR 1100 (HY000): Table 't' was not locked with LOCK TABLES
root@localhost : liuwenhe 18:47:51>delete  from  t;         #不可以操作r之外的表
ERROR 1100 (HY000): Table 't' was not locked with LOCK TABLES
root@localhost : liuwenhe 18:47:28>select  count(*) from  r;   #可以讀取r表
+----------+
| count(*) |
+----------+
|        5 |
+----------+
1 row in set (0.00 sec)
root@localhost : liuwenhe 18:47:39>insert into  r values (10);   #不可以操作r表
ERROR 1099 (HY000): Table 'r' was locked with a READ lock and can't be updated

會話2:
root@localhost : liuwenhe 18:53:02>delete  from  t limit 1;   #會話2可以操作t表
Query OK, 1 row affected (0.01 sec)
root@localhost : liuwenhe 18:53:47>select count(*) from yy2;  #會話2可以檢視其它表
+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)

root@localhost : liuwenhe 18:54:29>delete  from r;   #等待,不能操作session1鎖定的表r
root@localhost : liuwenhe 18:55:20>select * from r;  #可以檢視session1鎖定表!
+------+
| id   |
+------+
|   10 |
總結:
lock tables  t  write:當前會話能讀寫該表,但是不能讀寫其它的表;其它會話可以讀寫其它的表,但是不可以讀寫該表;
lock  table  r read: 當前會話只能能讀該表,但是不能操作該表,也不能讀寫其它的表,其它會話可讀但不可寫該表,可讀寫其它的表)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29654823/viewspace-2682140/,如需轉載,請註明出處,否則將追究法律責任。

相關文章