mysqldump
導出表結構
mysqldump -hHost -PPort -uUser -pPassword -d Database TableName
導出表結構和數據
# 直接導出,User 必須有 Table Lock 權限
mysqldump -hHost -PPort -uUser -pPassword --default-character-set=utf8 Database TableName
# mysqldump: Got error: 1044: Access denied for user 'User'@'%' to database 'Database' when doing LOCK TABLES
# User 沒有 Table Lock 權限, 當執行mysqldump命令時,是一次性鎖定當前庫的所有表。而不是鎖定當前導出表
mysqldump -hHost -PPort -uUser -pPassword --default-character-set=utf8 --skip-lock-tables Database TableName
# mysqldump: Couldn't execute 'SELECT COLUMN_NAME, JSON_EXTRACT(HISTOGRAM, '$."number-of-buckets-specified"') FROM information_schema.COLUMN_STATISTICS WHERE SCHEMA_NAME = 'Database' AND TABLE_NAME = 'TableName';': Unknown table 'COLUMN_STATISTICS' in information_schema (1109)
# 禁用新標誌
mysqldump -hHost -PPort -uUser -pPassword --default-character-set=utf8 --skip-lock-tables --column-statistics=0 Database TableName
表上鎖
LOCK TABLES爲當前線程鎖定表。
如果一個線程獲得在一個表上的一個READ鎖,該線程和所有其他線程只能從表中讀。 如果一個線程獲得一個表上的一個WRITE鎖,那麼只有持鎖的線程READ或WRITE表,其他線程被阻止。
lock table TableName [READ|WRITE];
解鎖表
UNLOCK TABLES釋放被當前線程持有的任何鎖,當線程發出另外一個LOCK TABLES時,或當服務器的連接被關閉時,當前線程鎖定的所有表會自動被解鎖。
UNLOCK TABLES;
查看上鎖表
show open table from Database where In_use > 0;