十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
今天接到宇航同學(xué)的問題,他們老大要求更改數(shù)據(jù)庫名稱,居然是為了數(shù)據(jù)庫安全???我靠!真強(qiáng)的想法啊。因?yàn)樗麄兊臄?shù)據(jù)庫是采用的INNODB存儲(chǔ)引擎,不能直接修改數(shù)據(jù)庫的名稱,所以現(xiàn)轉(zhuǎn)換成MyISAM存儲(chǔ)引擎在修改表名在轉(zhuǎn)換成INNODB存儲(chǔ)引擎就好了,雖然過程比較麻煩,不如修改表名那樣容易,但是能修改就偷笑吧。我個(gè)人認(rèn)為數(shù)據(jù)庫的名稱屬于數(shù)據(jù)庫設(shè)計(jì)范疇,應(yīng)該遵守設(shè)計(jì)規(guī)范,不能隨便的修改名稱。第一次聽說為了安全修改數(shù)據(jù)庫名,實(shí)在是不可取。修改名稱詳細(xì)步驟(因?yàn)椴粌H僅是上面那幾步)mysql use dinghao;mysql select * from t1;+——+———–+| id | name |+——+———–+| 1 | 劉德華 | +——+———–+1 row in set (0.00 sec)mysql show create table t1;+——-+————————————————————————————————————————-+| Table | Create Table |+——-+————————————————————————————————————————-+| t1 | CREATE TABLE `t1` (`id` int(11) DEFAULT NULL,`name` varchar(20) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 | +——-+————————————————————————————————————————-+1 row in set (0.00 sec)mysql flush tables;Query OK, 0 rows affected (0.00 sec)mysql flush logs;Query OK, 0 rows affected (0.00 sec)mysql show processlist; #這一步主要查看有沒有其他進(jìn)程連接,要保證沒有其他程序操作數(shù)據(jù)庫。+—-+——+———–+———+———+——-+——-+——————+| Id | User | Host | db | Command | Time | State | Info |+—-+——+———–+———+———+——-+——-+——————+| 17 | root | localhost | dinghao | Query | 0 | NULL | show processlist | +—-+——+———–+———+———+——-+——-+——————+1 rows in set (0.00 sec)mysql alter table t1 engine=MyISAM;Query OK, 1 row affected (0.01 sec)Records: 1 Duplicates: 0 Warnings: 0mysql exit[root@mysqludf var]# mv dinghao aaa;mysql use aaa;Database changedmysql alter table t1 engine=INNODB;Query OK, 1 row affected (0.00 sec)Records: 1 Duplicates: 0 Warnings: 0mysql select * from t1;+——+———–+| id | name |+——+———–+| 1 | 劉德華 | 站長教學(xué)網(wǎng) eduyo.com+——+———–+1 row in set (0.00 sec)注意,在改名之前必須現(xiàn)轉(zhuǎn)換存儲(chǔ)引擎,否則會(huì)報(bào)錯(cuò),你想換的這個(gè)名稱就換不成了,只能換另外一個(gè)名稱了。錯(cuò)誤的方法就不演示了,光記住好的就行了。

創(chuàng)新互聯(lián)主打移動(dòng)網(wǎng)站、成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站改版、網(wǎng)絡(luò)推廣、網(wǎng)站維護(hù)、域名注冊(cè)、等互聯(lián)網(wǎng)信息服務(wù),為各行業(yè)提供服務(wù)。在技術(shù)實(shí)力的保障下,我們?yōu)榭蛻舫兄Z穩(wěn)定,放心的服務(wù),根據(jù)網(wǎng)站的內(nèi)容與功能再?zèng)Q定采用什么樣的設(shè)計(jì)。最后,要實(shí)現(xiàn)符合網(wǎng)站需求的內(nèi)容、功能與設(shè)計(jì),我們還會(huì)規(guī)劃穩(wěn)定安全的技術(shù)方案做保障。
被取消的命令MySQL 之前提供了一個(gè) rename database db_old to db_new 的命令來直接對(duì)數(shù)據(jù)庫改名,可能由于實(shí)現(xiàn)的功能不完備(比如,這條命令可能是一個(gè)超大的事務(wù),或者是由于之前的表很多還是 MyISAM 等),后來的版本直接取消了這條命令。更改數(shù)據(jù)庫名大致上有以下幾種方案:
一、mysqldump 導(dǎo)入導(dǎo)出要說最簡單的方法,就是直接用 mysqldump 工具,在舊庫導(dǎo)出再往新庫導(dǎo)入(最原始、最慢、最容易想到)的方法:舊庫 yttdb_old 導(dǎo)出(包含的對(duì)象:表、視圖、觸發(fā)器、事件、存儲(chǔ)過程、存儲(chǔ)函數(shù))
二、改整庫的表名利用 MySQL 更改表名的方法來批量把舊庫的所有表依次遍歷,改名為新庫的表。這種方法比第一種要快很多倍,但是沒有第一步操作起來那么順滑,不能一步到位。比如,要把數(shù)據(jù)庫 yttdb_old 改名為 yttdb_new,如果數(shù)據(jù)庫 yttdb_old 里只有磁盤表,那很簡單,直接改名即可?;蛘邔憘€(gè)腳本來批量改,非常簡單。但是一般舊庫里不只有磁盤表,還包含其他各種對(duì)象。這時(shí)候可以先考慮把舊庫的各種對(duì)象導(dǎo)出來,完了在逐一改完表名后導(dǎo)進(jìn)去。
三、歷史方案其實(shí)在 MySQL 早期還有一種方法。假設(shè) MySQL 部署好了后,所有的 binlog 都有備份,并且二進(jìn)制日志格式還是 statement 的話,那就可以簡單搭建一臺(tái)從機(jī),讓它慢慢追主機(jī)到新的庫名,等確切要更改舊庫的時(shí)候,再直接晉升從機(jī)為主機(jī)即可。這里只需要從機(jī)配置一個(gè)參數(shù)來把舊庫指向?yàn)樾聨欤簉eplicate-rewrite-db=yttdb_old-yttdb_new不過這種局限性很大,不具備標(biāo)準(zhǔn)化,不推薦。
總結(jié)其實(shí)針對(duì) MySQL 本身改庫名,大致就這么幾種方法:
如果數(shù)據(jù)量小,推薦第一種;
數(shù)據(jù)量大,則推薦第二種;
數(shù)據(jù)量巨大,那就非 MySQL 本身能解決的了。
可通過部署第三方 ETL 工具,通過解析 MySQL 二進(jìn)制日志或其他的方式來把舊庫數(shù)據(jù)直接讀取到新庫達(dá)到改名的目的等等。
最安全的做法是進(jìn)入到mysql安裝目錄,修改庫名。
比如是默認(rèn)安裝的,那么位置在/var/lib/mysql/目錄下;目錄下的所有目錄都是庫名,直接用mv更改就可以;
提示: 如果進(jìn)入mysql用命令改會(huì)發(fā)生未知錯(cuò)誤的,而且新版本也不支持這種改法了!
進(jìn)入數(shù)據(jù)庫后,
先 use 數(shù)據(jù)庫名;
然后:
alter table customers rename custs;
MySQL在5.1引入了一個(gè)rename
database操作,但在MySQL5.1.23后又不支持這個(gè)命令??梢哉f是一個(gè)實(shí)驗(yàn)性的功能,沒有在生產(chǎn)中支持過(mysql-5.1
release在mysql-5.1.30),那么生產(chǎn)中我們有時(shí)為了追求完美需要改一下庫名。怎么操作呢?
這里提供一個(gè)變通的方法。
1.
創(chuàng)建出新庫名:
復(fù)制代碼
代碼如下:
mysqlcreate
database
db_v2;
2.生成rename語句,從olddb里遷移,我這里olddb里sbtest;
復(fù)制代碼
代碼如下:mysqlselect
concat("rename
table
",table_schema,".",table_name,"
to
db_v2.",table_name,";")
into
outfile
'/tmp/rename_to_db_v2.sql'
from
information_schema.tables
where
table_schema='sbtest';
3.執(zhí)行生成的sql
復(fù)制代碼
代碼如下:mysqlsource
/tmp/rename_to_db_v2.sql
就這么簡單可以搞定了。
Good
luck!
一、未使用的數(shù)據(jù)庫 改名方法如下:1、未使用的數(shù)據(jù)庫改名比較方便,找到你要更改的數(shù)據(jù)庫,右鍵選擇【重命名】。2、然后將你想要更改的名字寫好,然后點(diǎn)擊一下旁邊的空白欄。3、然后你就發(fā)現(xiàn)數(shù)據(jù)庫的名稱已經(jīng)改好了。二、使用中的數(shù)據(jù)庫改名方法如下:1、使用中的數(shù)據(jù)庫你在使用這種方法顯然是不合適,你用這種方法更改數(shù)據(jù)庫的名字之后會(huì)提示你無法重命名數(shù)據(jù)庫。2、這時(shí)還是同樣的右鍵你要改名的數(shù)據(jù)庫,選擇【屬性】按鈕。3、然后在數(shù)據(jù)庫屬性左側(cè)菜單欄中選擇【選項(xiàng)】按鈕。4、然后在【狀態(tài)】欄目下有一項(xiàng)限制訪問選項(xiàng),默認(rèn)的是MULTI_USER,意為多用戶模式,然后你將其更改為【SINGLE_USER】單用戶模式,點(diǎn)擊確定即可。5、然后你在使用上面的方法更改數(shù)據(jù)庫的名稱會(huì)發(fā)現(xiàn)數(shù)據(jù)庫改名成功了。