1. 程式人生 > 其它 >shell程式設計 - 流程控制語句

shell程式設計 - 流程控制語句

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;