于項(xiàng)目升級(jí)或者服務(wù)器更換,需要將數(shù)據(jù)從一個(gè)數(shù)據(jù)庫(kù)服務(wù)轉(zhuǎn)移到另一個(gè)數(shù)據(jù)庫(kù)服務(wù)中。兩個(gè)數(shù)據(jù)庫(kù)所在的服務(wù)器的公網(wǎng)IP分別為x.x.x.x和y.y.y.y。
都江堰ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書(shū)合作)期待與您的合作!
進(jìn)行MySQL數(shù)據(jù)遷移之前,需要做一些準(zhǔn)備工作,即兩臺(tái)服務(wù)器上配置相同環(huán)境。需要在公網(wǎng)IP分別為x.x.x.x和y.y.y.y的服務(wù)器上都安裝mysql-5.7.37。
準(zhǔn)備工作
第一步,下載mysql-5.7.37。
第二步,配置mysql。
第三步,安裝mysql-5.7.37。
第四步,遠(yuǎn)程連接另一臺(tái)服務(wù)器上的mysql。
第五步,不進(jìn)入mysql根目錄即可進(jìn)行相應(yīng)的操作。
MySQL數(shù)據(jù)遷移常用方法
MySQL數(shù)據(jù)遷移一般可分為物理遷移和邏輯遷移。
物理遷移適用于海量數(shù)據(jù)整體遷移,可以直接復(fù)制數(shù)據(jù)文件或使用navicat來(lái)進(jìn)行備份遷移。不同的服務(wù)器之間采用物理遷移需要將兩臺(tái)服務(wù)器中的MySQL server保持完全一樣的版本、配置和權(quán)限。這種物理遷移優(yōu)點(diǎn)是速度快,缺點(diǎn)是要求新服務(wù)器與原服務(wù)器配置完全一致,即便如此也有可能引起一些未知錯(cuò)誤。
如果規(guī)模較小,業(yè)務(wù)也并不繁忙,推薦使用mysqldump即邏輯遷移法,它相對(duì)來(lái)說(shuō)更輕巧、穩(wěn)健一些。mysqldump的原理是在導(dǎo)入到新數(shù)據(jù)庫(kù)時(shí),先將原數(shù)據(jù)庫(kù)表結(jié)構(gòu)使用CREATE TABLE 'table'語(yǔ)句創(chuàng)建,然后在使用INSERT將原數(shù)據(jù)導(dǎo)入至新表中。可以理解為一個(gè)批量導(dǎo)入腳本。這樣按照規(guī)范命令導(dǎo)入數(shù)據(jù),大幅減少奇怪的未知錯(cuò)誤出現(xiàn)。
第一種方案:物理遷移-使用navicat
第一步,下載并安裝Navicat。
到網(wǎng)址下載需要的Navicat軟件,之后在Windows系統(tǒng)中安裝。安裝成功后,然后進(jìn)行數(shù)據(jù)庫(kù)連接。
第二步,選擇要導(dǎo)出的數(shù)據(jù)庫(kù)ZJZK2022,格式為.sql。
具體操作:選中ZJZK2022,然后右鍵:轉(zhuǎn)儲(chǔ)SQL - 結(jié)構(gòu)+數(shù)據(jù) - 選擇路徑。得到需要的.sql文件。
第三步,將.sql文件導(dǎo)入新服務(wù)器數(shù)據(jù)庫(kù)中。
如果根據(jù)已有的SQL文件執(zhí)行數(shù)據(jù)導(dǎo)入,那么可以直接在打開(kāi)一個(gè)數(shù)據(jù)庫(kù)后,新建一個(gè)查詢(xún)窗口,然后將sql文件中的內(nèi)容粘貼到窗口中執(zhí)行即可,這種方式同時(shí)適用于單表數(shù)據(jù)導(dǎo)入與數(shù)據(jù)庫(kù)整體導(dǎo)入。
如果想要進(jìn)行整個(gè)數(shù)據(jù)庫(kù)的數(shù)據(jù)導(dǎo)入,也可以直接選中新服務(wù)器IP,右鍵:運(yùn)行SQL。然后選擇之前導(dǎo)出的數(shù)據(jù)庫(kù)sql文件,最后點(diǎn)擊“開(kāi)始”??梢缘玫脚c之前服務(wù)器數(shù)據(jù)庫(kù)中相同的數(shù)據(jù)。
第二種方案:邏輯遷移-使用mysqldump
登錄遠(yuǎn)程服務(wù)器,在服務(wù)器中導(dǎo)出數(shù)據(jù)庫(kù)
第一步,登錄公網(wǎng)IP為x.x.x.x的阿里云ECS服務(wù)器。
第二步,將需要遷移的原數(shù)據(jù)庫(kù)ZJZK2022中的數(shù)據(jù)導(dǎo)出,生成*.sql文件。
命令:service mysql start
/mnt/mysql/mysql-5.7.37/bin/mysqldump -u root -p --opt ZJZK2022 /tmp/ZJZK2022-data-export.sql
然后輸入登錄密碼“123456”。
執(zhí)行mysqldump命令后,若沒(méi)有報(bào)錯(cuò),則shel不會(huì)有任何結(jié)果顯示。
注釋?zhuān)篫JZK2022——本次準(zhǔn)備遷移的數(shù)據(jù)庫(kù);
/tmp/ZJZK2022-data-export.sql——導(dǎo)出時(shí)生成的數(shù)據(jù)文件存放的位置與文件名;
--opt——此命令參數(shù)開(kāi)啟代表著同時(shí)激活了quick、add-drop-table、add-locks、extended-insert和lock-tables 參數(shù);
quick——忽略緩存,直接將數(shù)據(jù)導(dǎo)出到*.sql文件中;
add-drop-table——在每個(gè)CREATE TABEL命令之前增加DROP-TABLE IF EXISTS語(yǔ)句,防止數(shù)據(jù)表重名;
add-locks——在備份數(shù)據(jù)表前后添加表鎖定與解鎖 SQL 語(yǔ)句;
extended-insert——此參數(shù)表示可以多行插入,提高導(dǎo)入效率,開(kāi)啟與否導(dǎo)入效率相差數(shù)倍,推薦開(kāi)啟。
第三步,進(jìn)入導(dǎo)出目錄查看導(dǎo)出結(jié)果。
命令:cd /tmp
ls
若結(jié)果顯示ZJZK2022-data-export.sql,則說(shuō)明文件已經(jīng)生成。
無(wú)服務(wù)器,獨(dú)立MySQL數(shù)據(jù)庫(kù)遠(yuǎn)程導(dǎo)出至本地計(jì)算機(jī)
如果在阿里云購(gòu)買(mǎi)的不是一臺(tái)服務(wù)器,而是一個(gè)獨(dú)立MySQL數(shù)據(jù)庫(kù)的話,那也可以將數(shù)據(jù)庫(kù)導(dǎo)出至本地計(jì)算機(jī)。
命令:service mysql start
/mnt/mysql/mysql-5.7.37/bin/mysqldump -h y.y.y.y -u ZJZK2022-remote -p -P3306 --default-character-set=utf8 --set-gtid-purged=OFF --column-statistics=0 ZJZK2022 /Desktop/ZJZK2022-data-export.sql
注釋?zhuān)簓.y.y.y——遠(yuǎn)程數(shù)據(jù)庫(kù)ip地址;
ZJZK2022-remote——擁有遠(yuǎn)程訪問(wèn)權(quán)限的數(shù)據(jù)庫(kù)賬號(hào);
-P 3306——數(shù)據(jù)庫(kù)訪問(wèn)端口,可根據(jù)自己情況修改;
default-character-set=utf8——導(dǎo)出時(shí)指定字符集;
set-gtid-purged=OFF——全局事務(wù) ID (GTID) 來(lái)強(qiáng)化數(shù)據(jù)庫(kù)的主備一致性,故障恢復(fù),以及容錯(cuò)能力。開(kāi)啟這個(gè)功能導(dǎo)入導(dǎo)出時(shí),可能會(huì)出錯(cuò),故關(guān)閉;
/Desktop/ZJZK2022-data-export.sql——本地計(jì)算機(jī)保存路徑及保存文件名。
提示:mysqldump常見(jiàn)報(bào)錯(cuò):mysqldump: Couldn't execute 'SELECT COLUMN_NAME, JSON_EXTRACT(HISTOGRAM, '$."number-of-buckets-specified"')
可在命令中添加column-statistics=0參數(shù)。因MySQL數(shù)據(jù)庫(kù)早期版本information_schema數(shù)據(jù)庫(kù)中沒(méi)有名為COLUMN_STATISTICS的數(shù)據(jù)表,新版mysqldump默認(rèn)啟用,我們可以通過(guò)此命令禁用它。
執(zhí)行命令后,若沒(méi)有報(bào)錯(cuò),則shel不會(huì)有任何結(jié)果顯示,但已經(jīng)可以在桌面上看到導(dǎo)出后生成的文件。
復(fù)制 *.sql 至新數(shù)據(jù)庫(kù)/新服務(wù)器
使用WinSCP將導(dǎo)出的*.sql文件傳送到內(nèi)網(wǎng)IP為y1.y1.y1.y1的新服務(wù)器對(duì)應(yīng)的路徑中。
命令:scp /tmp/ZJZK2022-data-export.sql root@y1.y1.y1.y1:/tmp/
輸入連接root@y1.y1.y1.y1的密碼“654321”。
若結(jié)果顯示“WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED”,則說(shuō)明出現(xiàn)錯(cuò)誤??梢允褂妹睢皊sh-keygen -R y1.y1.y1.y1”,然后重新嘗試連接,輸入yes,按下回車(chē),成功連接。
若結(jié)果顯示“ZJZK2022.sql 100% 7191 2.6MB/s 00:00”,則說(shuō)明數(shù)據(jù)傳送成功。
如果購(gòu)買(mǎi)的是獨(dú)立MySQL數(shù)據(jù)庫(kù)的話,也可以直接在阿里云服務(wù)器中直接向新服務(wù)器MySQL數(shù)據(jù)庫(kù)導(dǎo)入數(shù)據(jù)。
導(dǎo)入數(shù)據(jù)庫(kù)
方法一:本地?cái)?shù)據(jù)庫(kù)*.sql文件導(dǎo)入
第一步,當(dāng)數(shù)據(jù)傳輸?shù)焦W(wǎng)IP為y.y.y.y的服務(wù)器后,可以在此服務(wù)器上新建一個(gè)名為ZJZK2022_new數(shù)據(jù)庫(kù),然后使用mysql命令直接導(dǎo)入數(shù)據(jù)庫(kù)。
要將*.sql導(dǎo)入到數(shù)據(jù)庫(kù)中,首先以root或有足夠權(quán)限的賬號(hào)登錄MySQL。
命令:service mysql start
cd /mnt/mysql/mysql-5.7.37/bin
./mysql -u root -p
然后輸入登錄密碼“123456”,就可以進(jìn)入MySQL shell狀態(tài)。
接著創(chuàng)建一個(gè)名為ZJZK2022_new的新數(shù)據(jù)庫(kù)。
命令:mysql CREATE DATABASE ZJZK2022_new;
若執(zhí)行命令后返回內(nèi)容顯示“Query OK, 1 row affected (0.00 sec)”,則說(shuō)明新數(shù)據(jù)庫(kù)創(chuàng)建成功。
然后使用“CTRL+D”退出MySQL shell。
最后導(dǎo)入數(shù)據(jù)庫(kù)文件/tmp/ZJZK2022-data-export.sql。
命令:/mnt/mysql/mysql-5.7.37/bin/mysql -u root -p ZJZK2022_new /tmp/ZJZK2022-data-export.sql
若運(yùn)行成功,則命令行不會(huì)有任何提示。
若運(yùn)行失敗,則命令行會(huì)提示失敗原因。
注釋?zhuān)簉oot——可以登錄數(shù)據(jù)庫(kù)的用戶名;
ZJZK2022_new——?jiǎng)倓傂陆ǖ目諗?shù)據(jù)庫(kù),數(shù)據(jù)會(huì)導(dǎo)入到該數(shù)據(jù)庫(kù)中;
/tmp/ZJZK2022-data-export.sql——之前導(dǎo)出的sql文件,把它再導(dǎo)入到新數(shù)據(jù)庫(kù)中。
第二步,要檢測(cè)是否導(dǎo)入成功,可以登錄到MySQL查看并檢查數(shù)據(jù)庫(kù)中的數(shù)據(jù)。
命令:cd /mnt/mysql/mysql-5.7.37/bin
./mysql -u root -p
然后輸入登錄密碼“123456”,就可以進(jìn)入MySQL shell狀態(tài)。
# 選擇剛剛導(dǎo)入數(shù)據(jù)的新建數(shù)據(jù)庫(kù)
mysql USE ZJZK2022_new;
# 查看數(shù)據(jù)庫(kù)中包含的表
mysql SHOW TABLES;
# 打開(kāi)表查看內(nèi)容
mysql SELECT * FROM users;
若結(jié)果顯示的內(nèi)容與公網(wǎng)IP為x.x.x.x的服務(wù)器中的數(shù)據(jù)庫(kù)的內(nèi)容一致,則說(shuō)明mysql數(shù)據(jù)遷移成功。
方法二:在阿里云服務(wù)器中,直接遠(yuǎn)程將數(shù)據(jù)導(dǎo)入至新服務(wù)器
如果購(gòu)買(mǎi)的是獨(dú)立數(shù)據(jù)庫(kù)的話,那么就沒(méi)辦法先把*.sql存過(guò)去,再導(dǎo)入。所以我們可以直接在阿里云服務(wù)器上發(fā)起導(dǎo)入操作,直接導(dǎo)入至新服務(wù)器。
命令:/mnt/mysql/mysql-5.7.37/bin/mysql -h ZJZK2022_new -u root -p -P10010 ZJZK2022_new /tmp/ZJZK2022-data-export.sql
注釋?zhuān)篫JZK2022_new——新服務(wù)器MySQL數(shù)據(jù)庫(kù)地址;
-P——數(shù)據(jù)庫(kù)端口。
數(shù)據(jù)導(dǎo)入至新服務(wù)器MySQL,命令執(zhí)行成功后,并不會(huì)有任何提示。登錄新服務(wù)器數(shù)據(jù)庫(kù)可以看到遷移結(jié)果。
遠(yuǎn)程登錄新服務(wù)器MySQL,查看導(dǎo)入情況。
公網(wǎng)IP分別為x.x.x.x和y.y.y.y的服務(wù)器都已經(jīng)安裝好了mysql數(shù)據(jù)庫(kù)。
忘記MySQL的登錄密碼,通過(guò)重置密碼解決
命令:cd /mnt/mysql/mysql-5.7.37/bin
./mysql -u root -p123456
若結(jié)果顯示“ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)”,則說(shuō)明mysql的root用戶密碼錯(cuò)誤,需要重置密碼,然后用新密碼重新登錄數(shù)據(jù)庫(kù)。具體做法如下:
1)停止mysql數(shù)據(jù)庫(kù)。
命令:service mysql stop
2)新建文件夾/usr/local/mysql/data。
命令:mkdir -p /usr/local/mysql/data
3)啟動(dòng)mysql,并以不檢查權(quán)限的情況下啟動(dòng)。
命令:mysqld --skip-grant-tables
mysqld --user=root --skip-grant-tables
4)登錄mysql,修改密碼,刷新權(quán)限。
命令:mysql -uroot
mysql UPDATE mysql.user SET Password=PASSWORD('123456') where USER='root';
mysql flush privileges;
mysql exit
5)重啟之后輸入“mysql -uroot -p123456”即可進(jìn)入mysql。
不進(jìn)入mysql根目錄即可進(jìn)行相應(yīng)的操作
第一步,在兩臺(tái)服務(wù)器上都配置環(huán)境變量。
在文件/etc/profile中添加下面的代碼:
export PATH=$PATH:/mnt/mysql/mysql-5.7.37/bin
# 使profile文件生效
命令:source /etc/profile
# 導(dǎo)出數(shù)據(jù)
mysqldump -u root -p --opt ZJZK2022 /tmp/ZJZK2022-data-export.sql
# 導(dǎo)入數(shù)據(jù)
mysql -uroot -p123456
mysql -u root -p ZJZK2022_new /tmp/ZJZK2022-data-export.sql
mysql -h ZJZK2022_new -u root -p -P10010 ZJZK2022_new /tmp/ZJZK2022-data-export.sql
第二步,在公網(wǎng)IP為y.y.y.y的服務(wù)器中將需要遷移的原數(shù)據(jù)庫(kù)ZJZK2022中數(shù)據(jù)導(dǎo)出,生成*.sql文件,生成的文件仍在本服務(wù)器中。
1)可以在文件夾/mnt/mysql中創(chuàng)建一個(gè)名為mysql_export的腳本。
腳本代碼如下:
# 執(zhí)行MySQL命令 #!/bin/bash export MYSQL_PWD='123456' /mnt/mysql/mysql-5.7.37/bin/mysqldump -u root -p --opt ZJZK2022 /tmp/ZJZK2022-data-export.sql
2)把啟動(dòng)腳本放到開(kāi)機(jī)初始化目錄
命令:cp /mnt/mysql/mysql_export /etc/init.d/mysql_export
#賦予可執(zhí)行權(quán)限
命令:chmod +x /etc/init.d/mysql_export
#添加服務(wù)
命令:chkconfig --add mysql_export
#啟動(dòng)mysql_sign服務(wù)
命令:service mysql_export start
展開(kāi)閱讀全文
1、首先輸入代碼
public void SendByHttpClient(final String id, final String pw){
new Thread(new Runnable() {
@Override
public void run() {
try {
HttpClient httpclient=new DefaultHttpClient();
HttpPost httpPost=new HttpPost("應(yīng)用部署服務(wù)器上的IP地址:/HttpClientDemo/Login");//服務(wù)器地址,指向Servlet
ListNameValuePair params=new ArrayListNameValuePair();//將id和pw裝入list
params.add(new BasicNameValuePair("ID",id));
params.add(new BasicNameValuePair("PW",pw));
final UrlEncodedFormEntity entity=new UrlEncodedFormEntity(params,"utf-8");//以UTF-8格式發(fā)送
httpPost.setEntity(entity);
HttpResponse httpResponse= httpclient.execute(httpPost);
if(httpResponse.getStatusLine().getStatusCode()==200)//在200毫秒之內(nèi)接收到返回值
2、然后再輸入下方的代碼:
{
HttpEntity entity=httpResponse.getEntity();
String response=EntityUtils.toString(entity1, "utf-8");//以UTF-8格式解析
Message message=new Message();
message.what=USER_LOGIN;
message.obj=response;
handler.sendMessage(message);使用Message傳遞消息給線程
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
3、最終,測(cè)試結(jié)果圖,如下:
如何使用PLSQL連接服務(wù)器上的數(shù)據(jù)庫(kù),開(kāi)發(fā)初學(xué)者都需要會(huì)這個(gè)問(wèn)題。下面說(shuō)一下步驟,幫助大家配置host并成功查詢(xún)數(shù)據(jù)。
1、首先鼠標(biāo)右鍵PLSQL,選擇屬性,打開(kāi)PLSQL所在文件夾位置。
2、在文件夾中,找到instantclient文件夾。這里將該文件移出到PLSQL安裝文件外,方便之后修改。
3、然后在instantclient下,找到tnsnames.ora,用編輯器打開(kāi)。
4、在tnsnames.ora中,可以配置數(shù)據(jù)庫(kù)連接。數(shù)據(jù)庫(kù)名稱(chēng)、協(xié)議類(lèi)型、host、port、sid。配置好之后,保存。
5、打開(kāi)PLSQL,輸入username、password,選擇到配置的數(shù)據(jù)庫(kù),進(jìn)行連接。點(diǎn)擊“file”--“new”--“SQL Window”,打開(kāi)窗口,輸入查詢(xún)命令,F(xiàn)8執(zhí)行,連接成功了。