當搞亂mysql的檔案系統時,你必須停止mysql伺服器.為避免在現場計算機上停機,請使用具有same version of mysql伺服器的備份/虛擬機器.當backup mysql伺服器停止時,將表(我假設.frm,.myi等?)複製到/ var / lib / mysql / backup_db(backup_db的相應目錄)中的檔案系統中.
啟動backup mysql伺服器並確保使用指令碼或cli正確載入資料.驗證後,mysqldump backup_db資料庫,以便它可以載入到實時伺服器:
mysqldump --extended-insert backup_db > /root/sql/backup_db.sql
您現在已將原始備份資料轉換為sql語句,這些語句可以在不停機的情況下載入到mysql中(與原始資料不同).將backup_db.sql移動到實時計算機.
將backup_db.sql作為不同的資料庫匯入live mysql例項:
mysql backup_db < /root/sql/backup_db.sql
您現在應該將備份資料庫作為backup_db載入到mysql中.
現在,依賴於insert ignore或replace into語句(你是否在索引中覆蓋舊資料或「填充空白」?):
mysqldump --no-create-db
--no-create-info --extended-insert --insert-ignore merge_source | mysql backup_db
或者,對於replace into操作:
mysqldump --no-create-db --no-create-info --extended-insert merge_source | sed 's/insert into/replace into/g' | mysql backup_db
或者,不是將輸出路由回mysql,而是傳送到檔案並檢視sql語句.
mysqldump --no-create-db --no-create-info --extended-insert --insert-ignore merge_source > /root/sql/merge.sql
mysqldump --no-create-db --no-create-info --extended-insert merge_source | sed 's/insert into/replace into/g' > /root/sql/merge.sql
最後,為避免停機,請將第乙個資料庫轉儲到第二個資料庫:
mysqldump backup_db | mysql current_db
您可以始終首先鎖定資料庫,以防止資料被寫入(例如)z表中,並在表中使用外來鍵(已經寫過):
flush tables with read lock;
(按上一步執行轉儲)
unlock tables;
將flush命令新增到轉儲.sql檔案的開頭,並將unlock新增到最後.
在這種情況下,請務必檢查資料庫名稱的四倍!詢問您不確定的任何後續問題,因為這是高風險資料混合的東西.如果可能,執行(並詳細說明)開發伺服器上所需的確切步驟,或虛擬化測試或建立小規模測試.試試吧.當然,請採取足夠的備份來彌補每個資料丟失的可能性.
mysql程式更新 MySQL 更新執行的過程
mysql 查詢執行的過程鏈結 select語句的執行過程會經過聯結器 分析器 優化器 執行器 儲存引擎,同樣的 update語句也會同樣走一遍 select語句的執行過程。但是和 select最大不同的是,update語句會涉及到兩個日誌的操作 redo log 重做日誌 和 binlog 歸檔日...
Mysq遇到的問題整理更新
1 lock wait timeout exceeded try restarting transaction的問題解決 解決辦法 a 檢視當前的事務隔離級別 b 檢視當前資料庫的執行緒情況 c 沒有看到正在執行的很慢sql記錄執行緒,再去檢視innodb的事務表innodb trx,看下裡面是否有...
mysql更新時間 Mysql 更新時間
mysql時間加減函式為date add date sub 定義和用法 date add 函式向日期新增指定的時間間隔。date sub 函式向日期減少指定的時間間隔。語法date add date,interval expr type date sub date,interval expr typ...