本文目錄一覽:
我想修改mysql資料庫的名字,可以怎麼修改
被取消的命令MySQL 之前提供了一個 rename database db_old to db_new 的命令來直接對資料庫改名,可能由於實現的功能不完備(比如,這條命令可能是一個超大的事務,或者是由於之前的表很多還是 MyISAM 等),後來的版本直接取消了這條命令。更改資料庫名大致上有以下幾種方案:
一、mysqldump 導入導出要說最簡單的方法,就是直接用 mysqldump 工具,在舊庫導出再往新庫導入(最原始、最慢、最容易想到)的方法:舊庫 yttdb_old 導出(包含的對象:表、視圖、觸發器、事件、存儲過程、存儲函數)
二、改整庫的表名利用 MySQL 更改表名的方法來批量把舊庫的所有表依次遍歷,改名為新庫的表。這種方法比第一種要快很多倍,但是沒有第一步操作起來那麼順滑,不能一步到位。比如,要把資料庫 yttdb_old 改名為 yttdb_new,如果資料庫 yttdb_old 里只有磁碟表,那很簡單,直接改名即可。或者寫個腳本來批量改,非常簡單。但是一般舊庫里不只有磁碟表,還包含其他各種對象。這時候可以先考慮把舊庫的各種對象導出來,完了在逐一改完表名後導進去。
三、歷史方案其實在 MySQL 早期還有一種方法。假設 MySQL 部署好了後,所有的 binlog 都有備份,並且二進位日誌格式還是 statement 的話,那就可以簡單搭建一台從機,讓它慢慢追主機到新的庫名,等確切要更改舊庫的時候,再直接晉陞從機為主機即可。這裡只需要從機配置一個參數來把舊庫指向為新庫:replicate-rewrite-db=yttdb_old-yttdb_new不過這種局限性很大,不具備標準化,不推薦。
總結其實針對 MySQL 本身改庫名,大致就這麼幾種方法:
如果數據量小,推薦第一種;
數據量大,則推薦第二種;
數據量巨大,那就非 MySQL 本身能解決的了。
可通過部署第三方 ETL 工具,通過解析 MySQL 二進位日誌或其他的方式來把舊庫數據直接讀取到新庫達到改名的目的等等。
深入理解MySQL資料庫各種鎖(總結)
MyISAM和InnoDB存儲引擎使用的鎖:
封鎖粒度小:
由於InnoDB存儲引擎支持的是行級別的鎖,因此意向鎖(因為意向鎖是表鎖)其實不會阻塞除全表掃以外的任何請求。故表級意向鎖與行級鎖的兼容性如下所示
參考
參考
行鎖的三種演算法:
這條語句阻止其他事務插入10和20之間的數字,無論這個數字是否存在。 間隙可以跨越0個,單個或多個索引值。
共享鎖:
排他鎖:
樂觀鎖:總是假設最好的情況,每次去拿數據的時候都認為別人不會修改(天真), 操作數據時不會上鎖 ,但是 更新時會判斷在此期間有沒有別的事務更新這個數據,若被更新過,則失敗重試 ;適用於讀多寫少的場景。
樂觀鎖的實現方式 有:
關閉自動提交後,我們需要手動開啟事務。
上述就實現了悲觀鎖,悲觀鎖就是悲觀主義者,它會認為我們在事務A中操作數據1的時候,一定會有事務B來修改數據1,所以,在第2步我們將數據查詢出來後直接加上排它鎖(X)鎖,防止別的事務來修改事務1,直到我們commit後,才釋放了排它鎖。
安裝mysql資料庫報錯:mysql_server_error_1067
我遇到同樣的錯誤,折騰了好久才摸索出來。網上的解決辦法都試過了,沒有確實可行的。最終總結出來,終於解決了。
我的下載的是mysql-5.7.9綠色版出的問題。最終解決過程供你參考:
1、下載的mysql-5.7.9,出現你的問題。試了各種辦法無法解決。有網友說mysql-5.7.9版本有問題。我改下載了5.6.27版本,嘗試不成功。但報錯變為:無法啟動mysql服務,發生錯誤1067。解決辦法:my.ini 添加 tmpdir = D:\mysql-5.6.27-winx64\data。問題解決。
2、後來我對比了mysql-5.7.9與5.6.27,發現mysql-5.7.9-winx64沒有data目錄,mysql-5.6.27-winx64\data\mysql,存了不少數據文件。原來調試5.7.9的版本時,記得日誌報告一直有mysql.user、mysql.plugin不存在的提示。(原以為這些文件會自動生成)。後來把這個mysql-5.6.27-winx64\data下的mysql文件夾整個複製到5.7.9版本中的同目錄下。問題解決。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/254626.html