亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL數(shù)據(jù)庫改名的三種實現(xiàn)方式

 更新時間:2024年06月13日 14:50:04   作者:程序員達芬奇  
這篇文章主要介紹了MySQL數(shù)據(jù)庫改名的三種實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

如果表是 MyISAM 那么可以直接去到數(shù)據(jù)庫目錄 mv 就可以。

Innodb完全不行,自己測試過,會提示相關(guān)表不存在。

第一種方法

RENAME database olddbname TO newdbname

這個語法在 mysql-5.1.7 中被添加進來,到了mysql-5.1.23又去掉了,官方不推薦,會有丟失數(shù)據(jù)的危險!

第二種方法

  • 1.創(chuàng)建需要改成新名的數(shù)據(jù)庫。
  • 2.mysqldum 導(dǎo)出要改名的數(shù)據(jù)庫
  • 3.刪除原來的舊庫(確定是否真的需要)

當(dāng)然這種方法雖然安全,但是如果數(shù)據(jù)量大,會比較耗時。

#創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE IF NOT EXISTS `庫名` default charset utf8mb4 COLLATE utf8mb4_unicode_ci;

# 將db1庫備份到db1.sql文件
mysqldump -u root -p db1 > /tmp/db1.sql;

#Enter password: 
#[root@xxx ~]# 

# 導(dǎo)入備份文件到新庫db2
mysql -u root -p db2 < /tmp/db1.sql;

#Enter password: 
#[root@xxx ~]# 


# 刪除舊庫(如果真的需要)
DROP DATABASE db1;

第三種方法

我這里就用一個腳本,很簡單,相信大家都看的懂

newdatabase.sh

#!/bin/bash
# 假設(shè)將db1數(shù)據(jù)庫名改為db2
# MyISAM直接更改數(shù)據(jù)庫目錄下的文件即可
# 下面腳本是創(chuàng)建新數(shù)據(jù)庫,獲取舊數(shù)據(jù)庫所有表名,將其循環(huán)移動到新數(shù)據(jù)庫

mysql -uroot -p123456 -e 'create database if not exists db2'
list_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='db1'")

for table in $list_table
do
    mysql -uroot -p123456 -e "rename table db1.$table to db2.$table"
done

-p123456腳本中把明文密碼暴露出來。。。

[root@xxx script]# mysql --version
mysql  Ver 8.0.35 for Linux on x86_64 (MySQL Community Server - GPL)

[root@xxx script]# bash newdatabase.sh 
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql: [Warning] Using a password on the command line interface can be insecure.
#mysql:[警告]在命令行界面使用密碼可能是不安全的。 

執(zhí)行成功了但不安全,我們做下調(diào)整:

  • 生成密文 sginpwd.sh
#!/bin/bash
function b64Code()
{
    #參數(shù)1: 需要加密的串
    passauth=$1
    #參數(shù)2: 加密的次數(shù),次數(shù)越多密碼越長
    for i in `seq 1 $2`
    do
        #python2
        passauth=`echo $passauth |python -c "import base64;s=raw_input();print(base64.b64encode(s))"`
        #python3
        #passauth=`echo $passauth |python -c "import base64;s=input(); print(base64.b64encode(s.encode()).decode());"`
        echo "[+]第${i}次加密結(jié)果:$passauth"
    done
}

#執(zhí)行 b64Code 加密方法,使用明文密碼加密10次
b64Code 123456 10
#密碼是字符串加上單引號
  • 執(zhí)行sginpwd.sh
[root@xxx script]# bash sginpwd.sh
[+]第1次加密結(jié)果:MTIzNDU2
[+]第2次加密結(jié)果:TVRJek5EVTI=
[+]第3次加密結(jié)果:VFZSSmVrNUVWVEk9
[+]第4次加密結(jié)果:VkZaU1NtVnJOVVZXVkVrOQ==
[+]第5次加密結(jié)果:VmtaYVUxTnRWbkpPVlZaWFZrVnJPUT09
[+]第6次加密結(jié)果:Vm10YVlWVXhUblJXYmtwUFZsWmFXRlpyVm5KUFVUMDk=
[+]第7次加密結(jié)果:Vm0xMFlWbFdWWGhVYmxKWFltdHdVRlpzV21GWFJscHlWbTVLVUZWVU1Eaz0=
[+]第8次加密結(jié)果:Vm0weE1GbFdiRmRXV0doVllteEtXRmx0ZEhkVlJscHpWMjFHV0ZKc2NIbFdiVFZMVlVaV1ZVMUVhejA9
[+]第9次加密結(jié)果:Vm0wd2VFMUdiRmRpUm1SWFYwZG9WbGx0ZUV0WFJteDBaRWhrVmxKc2NIcFdNakZIVjBaS2MyTkliRmRpVkZaTVZsVmFWMVpWTVVWaGVqQTk=
[+]第10次加密結(jié)果:Vm0wd2QyVkZNVWRpUm1ScFVtMVNXRll3Wkc5V2JHeDBaVVYwV0ZKdGVEQmFSV2hyVm14S2MyTkljRmROYWtaSVZqQmFTMk15VGtsaVJtUnBWa1phVFZac1ZtRldNVnBXVFZWV2FHVnFRVGs9
  • newdatabase_beff.sh
#!/bin/bash
# 假設(shè)將db1數(shù)據(jù)庫名改為db2
# MyISAM直接更改數(shù)據(jù)庫目錄下的文件即可
# 下面腳本是創(chuàng)建新數(shù)據(jù)庫,獲取舊數(shù)據(jù)庫所有表名,將其循環(huán)移動到新數(shù)據(jù)庫

function deCode()
{
    #參數(shù)1: 加密串內(nèi)容
    passDstr=$1
    #參數(shù)2: 密碼解析次數(shù)
    for i in `seq 1 $2`
    do
        passDstr=`echo $passDstr |python -c "import base64;s=input(); print(base64.b64decode(s.encode()).decode());"`
    done
}

#b64Code方法得到的密文放在這里
mysqlPass="Vm0wd2QyVkZNVWRpUm1ScFVtMVNXRll3Wkc5V2JHeDBaVVYwV0ZKdGVEQmFSV2hyVm14S2MyTkljRmROYWtaSVZqQmFTMk15VGtsaVJtUnBWa1phVFZac1ZtRldNVnBXVFZWV2FHVnFRVGs9"
#使用加密10次的密文 解密
deCode $mysqlPass 10
mysql -uroot -p"${passDstr}" -e "show databases;"

mysql -uroot -p"${passDstr}" -e 'create database if not exists db2'
list_table=$(mysql -uroot -p"${passDstr}" -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='db1'")

for table in $list_table
do
    mysql -uroot -p"${passDstr}" -e "rename table db1.$table to db2.$table"
done
function deCode()
{
    #參數(shù)1: 加密串內(nèi)容
    passDstr=$1
    #參數(shù)2: 密碼解析次數(shù)
    for i in `seq 1 $2`
    do
		#python2
		passDstr=`echo $passDstr |python -c "import base64;s=raw_input();print(base64.b64decode(s))"`
		#python3
        #passDstr=`echo $passDstr |python -c "import base64;s=input(); print(base64.b64decode(s.encode()).decode());"`

    done
}

#b64Code方法得到的密文放在這里
mysqlPass="Vm0wd2QyVkZNVWRpUm1ScFVtMVNXRll3Wkc5V2JHeDBaVVYwV0ZKdGVEQmFSV2hyVm14S2MyTkljRmROYWtaSVZqQmFTMk15VGtsaVJtUnBWa1phVFZac1ZtRldNVnBXVFZWV2FHVnFRVGs9"
#使用加密10次的密文 解密
deCode $mysqlPass 10
mysql -uroot -p"${passDstr}" -e "show databases;"

mysql -uroot -p"${passDstr}" -e 'create database if not exists db2'
list_table=$(mysql -uroot -p"${passDstr}" -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='db1'")

for table in $list_table
do
    mysql -uroot -p"${passDstr}" -e "rename table db1.$table to db2.$table"
done
[root@xxx script]# bash newdatabase_beff.sh
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| db1                |
| db2                |
+--------------------+
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql: [Warning] Using a password on the command line interface can be insecure.

#登錄mysql,可以看到db1數(shù)據(jù)表遷移到db2了
mysql> use db1;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| active_log    |
| new           |
+---------------+
2 rows in set (0.00 sec)

mysql> show tables;
Empty set (0.00 sec)

mysql> use db2;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+---------------+
| Tables_in_db2 |
+---------------+
| active_log    |
| new           |
+---------------+
2 rows in set (0.00 sec)

這里用到了rename table,改表名的命令,但是如果新表名后面加數(shù)據(jù)庫名,就會將老數(shù)據(jù)庫的表移動到新的數(shù)據(jù)庫,所以,這種方法即安全,又快速。

番外:所有表是 MyISAM 修改數(shù)據(jù)庫名

1.先停止數(shù)據(jù)庫服務(wù)

systemctl stop mysqld
#service mysql stop

2.到數(shù)據(jù)庫目錄 mv

數(shù)據(jù)庫目錄默認(rèn)在/var/lib/mysql/,可以通過 find / -name mysql 查找

mv /var/lib/mysql/old_database /var/lib/mysql/new_database

3.啟動數(shù)據(jù)庫服務(wù)

systemctl start mysqld
#service mysql start

4.登錄mysql

如果顯示new_database數(shù)據(jù)庫,說明修改成功數(shù)據(jù)庫名了

show databases;

最終結(jié)果目錄改了,數(shù)據(jù)庫沒顯示,操作失敗不知道啥原因,以后再看吧

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 在VB.NET應(yīng)用中使用MySQL的方法

    在VB.NET應(yīng)用中使用MySQL的方法

    這篇文章主要介紹了在VB.NET應(yīng)用中使用MySQL的方法,操作基于Visual Studio IDE進行,需要的朋友可以參考下
    2015-06-06
  • 你知道哪幾種MYSQL的連接查詢

    你知道哪幾種MYSQL的連接查詢

    連接(join)查詢是將兩個查詢的結(jié)果以“橫向?qū)印钡姆绞胶喜⑵饋淼慕Y(jié)果,這篇文章主要給大家介紹了關(guān)于MYSQL連接查詢的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • MySQL不區(qū)分大小寫配置方法

    MySQL不區(qū)分大小寫配置方法

    MySQL 表內(nèi)數(shù)據(jù)條件查詢不區(qū)分大小寫是因為排序規(guī)則的問題,本文主要介紹了MySQL不區(qū)分大小寫配置方法,對大家的學(xué)習(xí)或者工作有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2024-01-01
  • Mysql?InnoDB引擎中頁目錄和槽的查找過程

    Mysql?InnoDB引擎中頁目錄和槽的查找過程

    這篇文章主要為大家介紹了Mysql?InnoDB引擎中頁目錄和槽的查找記錄過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • 解說mysql之binlog日志以及利用binlog日志恢復(fù)數(shù)據(jù)的方法

    解說mysql之binlog日志以及利用binlog日志恢復(fù)數(shù)據(jù)的方法

    下面小編就為大家?guī)硪黄庹fmysql之binlog日志以及利用binlog日志恢復(fù)數(shù)據(jù)的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • MySQL事務(wù)隔離機制詳解

    MySQL事務(wù)隔離機制詳解

    在數(shù)據(jù)庫中,事務(wù)是指一組邏輯操作,這些操作要么全部執(zhí)行,要么全部不執(zhí)行,是一個不可分割的工作單位,這篇文章主要介紹了MySQL事務(wù)隔離機制,需要的朋友可以參考下
    2022-11-11
  • mysql+shardingSphere的分庫分表實現(xiàn)示例

    mysql+shardingSphere的分庫分表實現(xiàn)示例

    分庫分表是一種場景解決方案,它的出現(xiàn)是為了解決一些場景問題的,本文主要介紹了mysql+shardingSphere的分庫分表實現(xiàn)示例,具有一定的參考價值,感興趣的可以
    2024-04-04
  • mysql查詢FIND_IN_SET?REGEXP實踐示例

    mysql查詢FIND_IN_SET?REGEXP實踐示例

    這篇文章主要為大家介紹了mysql查詢FIND_IN_SET?REGEXP實踐示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Navicat連接不上MySQL的問題解決

    Navicat連接不上MySQL的問題解決

    最近遇到了一件非常棘手的問題,用Navicat遠(yuǎn)程連接數(shù)據(jù)庫居然連接不到,真是頭都大了,下面這篇文章主要給大家介紹了關(guān)于Navicat連接不上MySQL的問題解決,需要的朋友可以參考下
    2023-02-02
  • 你知道m(xù)ysql中空值和null值的區(qū)別嗎

    你知道m(xù)ysql中空值和null值的區(qū)別嗎

    這篇文章主要給大家介紹了關(guān)于mysql中空值和null值區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評論