MYSQL數據庫遷移到ORACLE數據庫

MYSQL數據庫遷移到ORACLE數據庫

1、環境和需求
一、環境 html

MySQL數據庫服務器:java

OS version:linux 5.3 for 64 bitnode

Mysql Server version: 5.0.45mysql

Oracle數據庫服務器:linux

OS version:linux 5.3 for 64 bitweb

Oracle version:oracle 11g r2sql

二、需求數據庫

       把mysql數據庫的數據轉移到oracle數據庫。目前mysql數據庫的備份文件爲.sql文件,每一個表一個.sql文件,把這些文件的數據導入到oracle數據庫。ubuntu

2、mysql數據恢復windows

       採用先把mysql數據庫備份文件恢復到一個mysql測試庫中,而後使用oracle sql developer把mysql測試庫中的數據轉移到oracle數據庫。

       mysql備份恢復到myql測試庫:

       由於本次試驗採用的mysql備份爲.sql文件,因此採用批量source處理。批量執行.sql文件,實如今mysql測試庫從新創建表並恢復數據。

       若是備份文件採用的是其餘方式,則須要用對應的恢復辦法進行恢復。

       恢復操做:

[root@localhost ~]# mysql -u root -p

Enter password: ---輸入root用戶的密碼。

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 90

Server version: 5.0.45 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> use test;

Database changed

mysql> source actors.sql;

mysql> source act_tactics.sql;

mysql> ………………

一次把全部的.sql文件貼在mysql的命令窗口,批量執行便可。

       注:由於mysql庫是生產庫,不能直接作實驗,因此才把備份恢復到一個測試庫中,進行測試,實際中若是能夠直接連mysql數據庫,則這一步能夠省略。

3、經過oracel sql developer轉換數據庫

       Mysql轉到oracle數據庫,要根據不一樣狀況選擇不一樣的方法:

一、  從現有的mysql庫直接轉到oracle數據庫

這是不用恢復mysql數據庫,直接能夠用sql developer轉到oracle裏,這時要如今oracle數據庫中建好用戶(用戶名爲mysql數據庫名),選好默認表空間,mysql數據就會導入到該用戶下。

二、  從mysql數據庫導出的sql文件導入到oracle數據庫

若是是隻有mysql的導出文件,則須要先把該文件恢復到一個mysql數據庫中,而後再把恢復後的mysql數據庫轉換到oracle數據庫中。

這種狀況要注意oracle數據庫的用戶名。由於sql developer把mysql轉換到oracle數據庫中時,會把mysql的數據存放到一個用戶下,這個用戶名必定會和mysql的數據庫名相同。若是oracle中已有這個用戶,則數據直接導入到該用戶下;若是沒有這個用戶,則sql developer會直接建立這樣的用戶,並把數據導入到該用戶下。須要注意的是,sql developer默認建立的oracle數據庫用戶的默認表空間是user,若是不注意,頗有可能會致使user表空間爆滿!!!因此這種狀況最好先建一個和mysql數據庫名同樣的oracle用戶,以防止user表空間爆滿影響數據導入。

一、安裝oracel sql developer

       首先從oracle官方網站下載oracle sql developer,下載的sql developer是沒有集成jdk的,若是本機也沒有安裝過jdk,則須要先安裝對應版本的jdk,這個能夠查找sql developer的readme.html文件,裏面會說明須要的jdk。

11.jpg

 

    安裝的第一步會讓你選擇JDK,不然沒法安裝。安裝很是簡單,這裏就不作說明。

Windowd 64位sqldeveloper下載:

http://download.oracle.com/otn/java/sqldeveloper/sqldeveloper64-3.0.04.34-no-jre.zip

Windowd 32位sqldeveloper下載:

http://download.oracle.com/auth/otn/java/sqldeveloper/sqldeveloper-3.0.04.34.zip?e=1313718071&h=0b242a06885410fbb4df8b5628a804e8

安裝JDK和mysql-connector-Java

jdk-6u27-windows-x64.exe下載地址(最第要用jdk-6u11之後的版本):

http://download.oracle.com/auth/otn-pub/java/jdk/6u27-b07/jdk-6u27-windows-x64.exe?e=1313726411&h=ff3cc2d66e07d7d63d6f8e9fbabc3743

mysql-connector-java各版本下載:

http://download.softagency.net/mysql/Downloads/Connector-J/

mysql-connector-java配置:

12.jpg

 

13.jpg

 

    以上的mysql-connector-java-5.0.8-bin.jar就是mysql-connector-java-5.0.8.zip解壓出來的文件。配置好jdbc後,便可開始數據庫鏈接。

    若是要鏈接sql server,則下載jtds-1.2.5-dist.zip配置便可。

二、鏈接數據庫

       鏈接oracle的用戶要有create table權限,通常用system用戶就能夠。連mysql數據庫由於是讀取數據,用什麼用戶均可以(通常默認是root用戶)。

       轉換後oracle數據庫會多一個新的用戶名,就是mysql的數據庫名。除了這個用戶,系統還會自動建一個名爲EMULATION的用戶,該用戶能夠鎖定或刪除均可以。

打開sqldeveloper.exe:

14.jpg

 

新建oracle數據庫鏈接:

Sql developer轉換數據時會產生一些字典表,這些字典表會保存到sql developer連接oracle數據庫的用戶中,若是這個用戶的名字和Mysql數據庫名字不一樣,則mysql數據不會保存在該用戶下。

15.jpg

 

點擊測試,測試鏈接:

16.jpg

 

點擊保存:

17.jpg

 

點擊鏈接,便可鏈接到oracle數據庫:

18.jpg

 

新建mysql數據庫鏈接:

1.)選擇mysql選項卡

19.jpg

 

2.)填寫mysql數據庫信息

20.jpg

 

填寫完進行測試,成功後點擊保存,並鏈接到mysql數據庫。

21.jpg

 

三、複製表

       若是不用遷移整個數據,只是遷移表的數據,則能夠直接在mysql數據庫庫中選中要轉移的表,點「右鍵」選「複製到oracle」便可。此時會把錶轉移到sql developer連接oracle數據庫的用戶下,而且該用戶下不能有同名的表。

       不過從以往的經驗看,複製表要比遷移數據庫效率低,因此若是是複製全部的表,最好用移植數據庫功能。

四、移植數據庫

點擊「工具」,選擇「移植」

22.jpg

 

移植簡介

23.jpg

 

24.jpg

 

25.jpg

 

26.jpg

 

選擇要轉換的mysql數據庫,添加到列表中:

27.jpg

 

28.jpg

 

指定轉換規則,能夠根據本身的狀況設定字段屬性的轉換,也能夠新添加規則。不過通常選擇默認的就能知足需求。

29.jpg

 

選擇目標數據庫

30.jpg

 

31.jpg

 

查看轉換概要,點擊「完成」開始轉換

32.jpg

 

33.jpg

 

34.jpg

 

       轉換完成後須要檢查數據庫的各類對象是否完成,狀態是否正確,尤爲是表的數量必定要覈對,由於有時候有些表會不能成功轉換,須要手工操做。

4、修改oracle用戶名

       因 爲轉換過來的數據默認存放在USERS表空間裏,並且會建立一個和mysql數據庫名如出一轍的oracle用戶,並把mysql數據庫導入到該用戶下。 能夠exp出來新用戶的數據後,而後再導入到正確的用戶下,這樣數據也會存在正確的表空間下面。可是若是數據量很大的時候,exp/imp會很浪費時間, 建議數據量大的時候不要採用這種方式。

       若是要是先建好用戶(用戶名用mysql數據庫的數據庫名),定義好用戶的默認表空間,而後再作mysql到oracle轉換,這樣就能夠即把表存放到正確的位置,又能夠用正確的用戶名。也能夠改變數據庫的默認表空間防止自動建立用戶的默認表空間使用user表空間:

SQL> ALTER DATABASE DEFAULT TABLESPACE mis_data;

       注意:改過名字的用戶,權限會繼承,可是默認表空間不會繼承,須要手工再設定默認表空間:

SQL> ALTER USER OA identified by oa default tablespace MIS_DATA temporary tablespace TEMP;

修改底層表 USER$更換用戶名

注:修改oracle用戶名須要sys用戶,或者給操做用戶操做user$表的權限。

SQL> grant select on user$ TO system;

SQL> grant update on user$ to system;

一、 查看用戶的user#

SQL> show user

USER is "SYSTEM"

SQL> select user#,NAME from SYS.user$ WHERE NAME='TEST';

      USER# NAME

---------- ------------------------------

        93 TEST

二、修改用戶名

SQL> UPDATE USER$ SET NAME='新用戶名' WHERE USER#=93;

   已更新 1 行。

注:單引號中的新用戶名必定要用大寫,若是是小寫,下面會提示找不到該用戶。

三、提交完成

SQL> COMMIT;

四、修改系統檢查點

SQL> ALTER SYSTEM CHECKPOINT;

五、修改新用戶密碼

SQL> ALTER USER 新用戶名 IDENTIFIED BY 新密碼;

六、若是提示新用戶不存在,則刷新shared_pool

SQL> ALTER USER 新用戶名 IDENTIFIED BY 新密碼         

  *ERROR 位於第 1 行:ORA-01918: 用戶'新用戶'不存在

SQL> ALTER SYSTEM FLUSH SHARED_POOL;

七、刷新shared_pool後從新修改用戶密碼

SQL> ALTER USER 新用戶 IDENTIFIED BY 新密碼;

八、測試鏈接

SQL> CONN 新用戶/新密碼@orcl;

九、查看新用戶是否擁有原用戶的對象

SQL> SELECT * FROM TAB;

5、mysql遠程鏈接一、改表法

       多是你的賬號不容許從遠程登錄,只能在localhost。這個時候只要在localhost的那臺電腦,登入mysql後,更改 "mysql" 數據庫裏的 "user" 表裏的 "host" 項,從"localhost"改稱"%"。代碼以下:

mysql -u root –p vmware

mysql> use mysql;

  mysql> update user set host = '%' where user = 'root';

  mysql> select host, user from user;

二、受權法

例如,你想myuser使用mypassword從任何主機鏈接到mysql服務器的話。

       GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%'IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

  若是你想容許用戶myuser從ip爲192.168.1.6的主機鏈接到mysql服務器,並使用mypassword做爲密碼。

  GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3'IDENTIFIED BY

  'mypassword' WITH GRANT OPTION;

  我用的第一個方法,剛開始發現不行,在網上查了一下,少執行一個語句 mysql>FLUSH RIVILEGES使修改生效,就能夠了。

三、另一種方法

  在安裝mysql的機器上運行:

1)進入MySQL服務器

d:\mysql\bin\>mysql -h localhost -u root

2)賦予任何主機訪問數據的權限

mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION

3)修改生效

mysql>FLUSH PRIVILEGES

4)退出MySQL服務器

mysql>EXIT

  這樣就能夠在其它任何的主機上以root身份登陸啦。

若是通過上面的操做,還不能解決問題,那可能就是服務器的安全設置問題,是否是ip安全策略或防火牆沒有開啓3306的例外。

四、安全模式修改用戶密碼

在用root登陸mysql數據庫的時候報錯:

[root@mail mysql]# mysql -u root -p

Enter password:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

       這個錯誤通常都是root登陸mysql的密碼錯誤形成的(root登陸mysql的密碼和登陸系統時的密碼不是同一個密碼,有時候能夠不同),使用下面的方法能夠從新設定root登陸mysql數據庫的密碼,該方法很是使用,有時候爲了系統安全,必定要把root登陸mysql和登陸系統時的密碼改爲不一致:

[root@localhost mysql]# service mysqld stop

[root@localhost mysql]# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &

       而後能夠不用密碼直接進入系統:

[root@localhost mysql]# mysql -u root mysql

       進入系統後能夠直接修改root用戶的密碼:

mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';

mysql> FLUSH PRIVILEGES;

mysql> quit

[root@localhost mysql]# service mysqld start

[root@localhost mysql]# mysql -uroot -p

Enter password: <輸入新設的密碼newpassword>

mysql>

       啓動mysql安全模式的命令參數:

       skip-grant-tables:grant-tables,受權表。在啓動mysql時不啓動這個表,像忘了密碼啥的,用這個模式啓動很方便的。

       skip-networking:不監聽3306,說白了就是不啓動mysql的網絡服務。

       user=mysql:這俺就不形容了。

6、linux下mysql卸載和安裝一、MySQL RPM版本的安裝及卸載

一、前期準備

       因爲redhat Enterprise 5 中自帶一個mysql的版本,若是在安裝linux前未選擇mysql的安裝此步就可跳過,由於我當時安裝瞭如今將其卸載,步驟以下:

a. 查找已安裝的myslq 版本

# rpm -qa|grep mysql

       注意大小寫,若是mysql 不行就換MySQL。在屏幕上將顯示已安裝的mysql包名如:mysql-5.0.22-2.1.0.1 ;

b. 將搜索出的包名卸載

# rpm –e --nodeps mysql-5.0.22-2.1.0.1

       nodeps表示強制刪除

c. 再次查找該包名

       若是沒有結果輸出則代表已將該版本的mysql卸載了 。

2. 準備安裝資源

a. perl-DBI-1.5.2-1.fc6.i386.rpm

       該包爲是安裝mysql的依賴,沒它mysql安裝不起,查看是否安裝,若是安裝了就不須要了,能夠經過 # rpm -qa | grep perl* 查看是否已經安裝,該包在linux系統盤上能夠找到,如下提供該包下載。

b. MySQL-server-community-5.0.67-0.rhel5.rpm

  MySQL-client-community-5.0.67-0.rhel5.rpm

       可從http://dev.mysql.com/downloads/mysql/5.0.html 下載相應linux相應的版本。

c. 安裝文件上傳到服務器

       準備好相應的安裝包後將其利用FTP上傳到 linux系統路徑下。

3. 開始安裝

a. 先安裝 perl-DBI-1.5.2-1.fc6.i386.rpm

#rpm -ivh perl-DBI-1.5.2-1.fc6.i386.rpm

       查看是否安裝成功rpm -qa|grep perl-DBI*

b. 安裝好perl,接着先安裝 mysql server版

#rpm -ivh MySQL-server-community-5.0.67-0.rhel5.rpm

       查看是否安裝成功rpm -qa|grep MySQL ,查看該進程是否啓動ps -ef|grep MySQL ,因爲安裝好server版後就已經啓動了。

c. 安裝好server版,開始接着安裝 client版:

# rpm -ivh MySQL-client-community-5.0.67-0.rhel5.rpm

       查看是否安裝成功 #rpm -qa | MySQL。

d. 好了到此就已經安裝完畢,測試是否能夠運行:

# mysql

       出現 mysql> 命令符說明安裝成功,默認用戶爲root沒有密碼因此能夠直接進入。

二、           MySQL二進制版本的安裝及卸載

       二進制版本的mysql是已經編譯好的,無需configure,make make install 等步驟,只需配置一下便可使用,卸載也方便,直接刪除便可;如今以mysql-standard-4.1.13-pc-linux-gnu- i686.tar.gz 版本作介紹 :

1.    改變該文件爲可執行權限

# chmod 755  mysql-standard-4.1.13-pc-linux-gnu-i686.tar.gz

2. 將解壓後生成的目錄,複製到/usr/local/下並更名爲mysql

# tar -xvzf  mysql-standard-4.1.13-pc-linux-gnu-i686.tar.gz

2.    創建mysql組

# groupadd mysql

3.    創建mysql用戶而且加入到mysql組中

# useradd mysql -g mysql

4.    建立mysql配置文件

# cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf

    在 support-files目錄下有4個模版文件,咱們選擇其中一個座位Mysql的配置文件,覆蓋/etc/my.cnf(系統默認的配置,其中設置了性能參數和Mysql的一些路徑參數)。

5. 進入mysql目錄

# cd /usr/local/mysql

初試化表而且規定用mysql用戶來訪問

# ./scripts/mysql_install_db --user=mysql

       初始化表之後就開始給mysql和root用戶設定訪問權限。

6. 設定mysql用戶訪問權限

# chown -R mysql data

       設定mysql用戶能訪問/usr/local/mysql/data ,裏面存的是mysql的數據庫文件.這個目錄是在/etc/my.cnf中有配置,mysql_install_db時產生。

# chown -R mysql data/.

設定mysql用戶能訪問/usr/local/mysql/data/mysql下的全部文件。

# chgrp -R mysql .

設定mysql組可以訪問/usr/local/mysql。

# /usr/local/mysql/bin/mysqld_safe --user=mysql &

7. 進入 bin目錄

cd /usr/local/mysql/bin

8. 運行mysq命令

#mysql

       若是沒有沒有啓動 或出現 Can't connect to local MySQL server through socket '/tmp/mysql.sock'。

解決方法:

#cd /usr/local/mysql/support-files

啓動便可既可在生成/tmp/mysql.sock

#./mysql.server start

       若是 /tmp/mysql.sock 無該文件存在,且mysql是處於開啓的狀態。

解決方法:

#netstat -an | grep 3306   //查看 3306端口

#ps -ef | grep mysql  // 查找 mysql 進程

# kill -9  進程號    //強制刪除mysql的進程號

#./mysql.server start   //啓動便可 既可在生成 /tmp/mysql.sock

       若是在任意路徑下如數mysql命令獲得的無該命令咋辦呢?

解決方法:

修改 /etc/profile 文件,在文件中加入

PATH=$PATH:/usr/local/mysql/bin/

export PATH

       保存便可退出執行 source /etc/profile。以上操做完既能夠在任意目錄執行# mysql 命令。

若是想執行 service mysql start or restart stop 命令咋辦的? 在不能老#./mysql.server start

解決方法:

將 mysql.server複製一份到/etc/rc.d/init.d下並更名 mysql 或 建個鏈接文件,假設當前目錄爲/etc/rc.d/init.d

如:#cp /usr/local/mysql/support-files/mysql.server mysql(複製)

或:#ln -s /usr/local/mysql/support-files/mysql.server mysql (創建鏈接文件)

完成以上操做便可  執行 service mysql start (or restart stop)

用以下命令修改MYSQL密碼

# /usr/local/mysql/bin/mysqladmin -u root password yourpassword

默認安裝密碼爲空,爲了安全你必須立刻修改。

# chmod 700 /etc/init.d/mysql

# chkconfig --add mysqld

# chkconfig --level 345 mysql on

copy編譯目錄的一個腳本設置使mysql每次啓動都能自動運行。

# service mysql start

# netstat -atln

//啓動mysql服務

//查看3306端口是否打開。要注意在防火牆中開放該端口。

能夠用telnet  localhost  3306來測試一下,若是有反映,那就代表安裝成功了。

 

7、linux下修改mysql字符集1.查找MySQL的cnf文件的位置

[root@localhost ~]# find / -iname '*.cnf' -print

/usr/share/mysql/my-innodb-heavy-4G.cnf

/usr/share/mysql/my-large.cnf

/usr/share/mysql/my-small.cnf

/usr/share/mysql/my-medium.cnf

/usr/share/mysql/my-huge.cnf

/usr/share/texmf/web2c/texmf.cnf

/usr/share/texmf/web2c/mktex.cnf

/usr/share/texmf/web2c/fmtutil.cnf

/usr/share/texmf/tex/xmltex/xmltexfmtutil.cnf

/usr/share/texmf/tex/jadetex/jadefmtutil.cnf

/usr/share/doc/MySQL-server-community-5.1.22/my-innodb-heavy-4G.cnf

/usr/share/doc/MySQL-server-community-5.1.22/my-large.cnf

/usr/share/doc/MySQL-server-community-5.1.22/my-small.cnf

/usr/share/doc/MySQL-server-community-5.1.22/my-medium.cnf

/usr/share/doc/MySQL-server-community-5.1.22/my-huge.cnf

2.新建my.cnf文件

       拷貝 small.cnf、my-medium.cnf、my-huge.cnf、my-innodb-heavy-4G.cnf其中的一個到/etc下,命名爲my.cnf。

[root@localhost ~]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

3.修改my.cnf

[root@localhost ~]# vi /etc/my.cnf

在[client]下添加

default-character-set=utf8

在[mysqld]下添加

default-character-set=utf8

4.從新啓動MySQL

[root@localhost ~]# /etc/rc.d/init.d/mysql restart

Shutting down MySQL                                         [ 肯定 ]

Starting MySQL.                                             [ 肯定 ]

[root@localhost ~]# mysql -u root -p

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 1

Server version: 5.1.22-rc-community-log MySQL Community Edition (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

5.查看字符集設置

mysql> show variables like 'collation_%';

+----------------------+-----------------+

| Variable_name         | Value            |

+----------------------+-----------------+

| collation_connection | utf8_general_ci |

| collation_database    | utf8_general_ci |

| collation_server      | utf8_general_ci |

+----------------------+-----------------+

3 rows in set (0.02 sec)

mysql> show variables like 'character_set_%';

+--------------------------+----------------------------+

| Variable_name             | Value                       |

+--------------------------+----------------------------+

| character_set_client      | utf8                        |

| character_set_connection | utf8                        |

| character_set_database    | utf8                        |

| character_set_filesystem | binary                      |

| character_set_results     | utf8                        |

| character_set_server      | utf8                        |

| character_set_system      | utf8                        |

| character_sets_dir        | /usr/share/mysql/charsets/ |

+--------------------------+----------------------------+

8 rows in set (0.02 sec)

 

6.其餘的一些設置方法

修改數據庫的字符集

mysql>use mydb

mysql>alter database mydb character set utf-8;

建立數據庫指定數據庫的字符集

mysql>create database mydb character set utf-8;

經過配置文件修改:

修改/var/lib/mysql/mydb/db.opt

default-character-set=latin1

default-collation=latin1_swedish_ci

default-character-set=utf8

default-collation=utf8_general_ci

重起MySQL:

[root@localhost ~]# /etc/rc.d/init.d/mysql restart

經過MySQL命令行修改:

mysql> set character_set_client=utf8;

Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_connection=utf8;

Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_database=utf8;

Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_results=utf8;

Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_server=utf8;

Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_system=utf8;

Query OK, 0 rows affected (0.01 sec)

mysql> set collation_connection=utf8;

Query OK, 0 rows affected (0.01 sec)

mysql> set collation_database=utf8;

Query OK, 0 rows affected (0.01 sec)

mysql> set collation_server=utf8;

Query OK, 0 rows affected (0.01 sec)

查看:

mysql> show variables like 'character_set_%';

+--------------------------+----------------------------+

| Variable_name             | Value                       |

+--------------------------+----------------------------+

| character_set_client      | utf8                        |

| character_set_connection | utf8                        |

| character_set_database    | utf8                        |

| character_set_filesystem | binary                      |

| character_set_results     | utf8                        |

| character_set_server      | utf8                        |

| character_set_system      | utf8                        |

| character_sets_dir        | /usr/share/mysql/charsets/ |

+--------------------------+----------------------------+

8 rows in set (0.03 sec)

mysql> show variables like 'collation_%';

+----------------------+-----------------+

| Variable_name         | Value            |

+----------------------+-----------------+

| collation_connection | utf8_general_ci |

| collation_database    | utf8_general_ci |

| collation_server      | utf8_general_ci |

+----------------------+-----------------+

3 rows in set (0.04 sec)

7.MYSQL字符集問題

       MySQL的字符集支持(Character Set Support)有兩個方面:字符集(Character set)和排序方式(Collation)。對於字符集的支持細化到四個層次:

    服務器(server),數據庫(database),數據表(table)和鏈接(connection)。

1.MySQL默認字符集

       MySQL對於字符集的指定能夠細化到一個數據庫,一張表,一列,應該用什麼字符集。

可是,傳統的程序在建立數據庫和數據表時並無使用那麼複雜的配置,它們用的是默認的配置,那麼,默認的配置從何而來呢?

(1)編譯MySQL 時,指定了一個默認的字符集,這個字符集是 latin1;

(2)安裝MySQL 時,能夠在配置文件 (my.ini) 中指定一個默認的的字符集,若是沒指定,這個值繼承自編譯時指定的;

(3)啓動mysqld 時,能夠在命令行參數中指定一個默認的的字符集,若是沒指定,這個值繼承自配置文件中的配置,此時 character_set_server 被設定爲這個默認的字符集;

(4)當建立一個新的數據庫時,除非明確指定,這個數據庫的字符集被缺省設定爲character_set_server;

(5)當選定了一個數據庫時,character_set_database 被設定爲這個數據庫默認的字符集;

(6)在這個數據庫裏建立一張表時,表默認的字符集被設定爲 character_set_database,也就是這個數據庫默認的字符集;

(7)當在表內設置一欄時,除非明確指定,不然此欄缺省的字符集就是表默認的字符集;

簡單的總結一下,若是什麼地方都不修改,那麼全部的數據庫的全部表的全部欄位的都用

latin1 存儲,不過咱們若是安裝 MySQL,通常都會選擇多語言支持,也就是說,安裝程序會自動在配置文件中把

default_character_set 設置爲 UTF-8,這保證了缺省狀況下,全部的數據庫的全部表的全部欄位的都用 UTF-8 存儲。

2.查看默認字符集

       默認狀況下,mysql的字符集是latin1(ISO_8859_1)。一般,查看系統的字符集和排序方式的設定能夠經過下面的兩條命令:

mysql> SHOW VARIABLES LIKE 'character%';

+--------------------------+---------------------------------+

| Variable_name             | Value                            |

+--------------------------+---------------------------------+

| character_set_client      | latin1                           |

| character_set_connection | latin1                           |

| character_set_database    | latin1                           |

| character_set_filesystem | binary                      |

| character_set_results     | latin1                           |

| character_set_server      | latin1                           |

| character_set_system     | utf8                             |

| character_sets_dir        | D:"mysql-5.0.37"share"charsets" |

+--------------------------+---------------------------------+

mysql> SHOW VARIABLES LIKE 'collation_%';

+----------------------+-----------------+

| Variable_name         | Value            |

+----------------------+-----------------+

| collation_connection | utf8_general_ci |

| collation_database    | utf8_general_ci |

| collation_server      | utf8_general_ci |

+----------------------+-----------------+

3.修改默認字符集

(1) 最簡單的修改方法,就是修改mysql的my.ini文件中的字符集鍵值,

如     default-character-set = utf8

       character_set_server = utf8

    修改完後,重啓mysql的服務,service mysql restart,查看字符集,發現數據庫編碼均已改爲utf8:

mysql> SHOW VARIABLES LIKE 'character%';

+--------------------------+---------------------------------+

| Variable_name             | Value                            |

+--------------------------+---------------------------------+

| character_set_client      | utf8                             |

| character_set_connection | utf8                             |

| character_set_database    | utf8                             |

| character_set_filesystem | binary                           |

| character_set_results     | utf8                             |

| character_set_server      | utf8                             |

| character_set_system      | utf8                             |

| character_sets_dir        | D:"mysql-5.0.37"share"charsets" |

+--------------------------+---------------------------------+

(2) 還有一種修改字符集的方法,就是使用mysql的命令

mysql> SET character_set_client = utf8 ;

8、mysql查看數據庫結構一、查看錶信息

mysql> desc 表名;

mysql> show columns from 表名;

mysql> describe 表名;

mysql> show create table 表名;

mysql> use information_schema

mysql> select * from columns where table_name='表名';

二、查看數據庫

mysql> show databases;

mysql> use 數據庫名;

mysql> show tables;

三、alter table操做

       原有一unique索引AK_PAS_Name(PAC_Name)在表tb_webparamcounter中,執行如下sql修改索引

mysql> alter table tb_webparamcounter drop index AK_PAS_Name;

mysql> alter table tb_webparamcounter add UNIQUE AK_PAS_Name(PC_ID,PAC_Name);

       若發現索引的邏輯不對,還須要再加一個字段進去,執行:

mysql> alter table tb_webparamcounter drop index AK_PAS_Name;

mysql> alter table tb_webparamcounter add UNIQUE AK_PAS_Name(PC_ID,PAC_Name,PAC_Value);

       注意:這時的PC_ID,PAC_Name,PAC_Value三個字段不是FOREIGN KEY,不然必需先drop FOREIGN KEY,再重作上一步才行。

四、查看存儲過程

mysql> show procedure status;

9、linux下mysql命令集1.linux下啓動mysql

[root@localhost ~]# mysqladmin start

       /ect/init.d/mysql start (前面爲mysql的安裝路徑)

2.linux下重啓mysql

[root@localhost ~]# mysqladmin restart

       /ect/init.d/mysql restart (前面爲mysql的安裝路徑)

3.linux下關閉mysql的命令:

[root@localhost ~]# mysqladmin shutdown

  /ect/init.d/mysql shutdown (前面爲mysql的安裝路徑)

4.鏈接本機上的mysql

       進入目錄mysql\bin,再鍵入命令mysql -uroot -p, 回車後提示輸入密碼。

退出mysql命令:exit(回車)

5.修改mysql密碼

       mysqladmin -u用戶名 -p舊密碼 password 新密碼,或進入mysql命令行SET PASSWORD FOR root=PASSWORD("root");

6.增長新用戶

注意:mysql環境中的命令後面都帶一個分號做爲命令結束符。

       grant select on 數據庫.* to 用戶名@登陸主機 identified by "密碼"。如增長一個用戶test密碼爲123,讓他能夠在任何主機上登陸, 並對全部數據庫有查詢、插入、修改、刪除的權限。首先用以root用戶連入mysql,而後鍵入如下命令:

grant select,insert,update,delete on *.* to test Identified by "123";

7.有關mysql數據庫方面的操做

  必須首先登陸到mysql中,有關操做都是在mysql的提示符下進行,並且每一個命令以分號結束

一、顯示數據庫列表。

mysql> show databases;

二、顯示庫中的數據表:

mysql> use mysql; //打開庫

mysql> show tables;

三、顯示數據表的結構:

mysql> describe 表名;

四、建庫:

mysql> create database 庫名;

五、建表:

mysql> use 庫名;

mysql> create table 表名(字段設定列表);

六、刪庫和刪表:

mysql> drop database 庫名;

mysql> drop table 表名;

七、將表中記錄清空:

mysql> delete from 表名;

八、顯示錶中的記錄:

mysql> select * from 表名;

九、編碼的修改

若是要改變整個mysql的編碼格式:  

啓動mysql的時候,mysqld_safe命令行加入  

--default-character-set=gbk  

若是要改變某個庫的編碼格式:在mysql提示符後輸入命令  

alter database db_name default character set gbk;

8.數據的導入導出

一、文本數據轉到數據庫中

       文本數據應符合的格式:字段數據之間用tab鍵隔開,null值用來代替。例:

  1 name duty 2006-11-23

  數據傳入命令 load data local infile "文件名" into table 表名;

二、導出數據庫和表

  mysqldump --opt news > news.sql(將數據庫news中的全部表備份到news.sql文件,news.sql是一個文本文件,文件名任取。)

  mysqldump --opt news author article > author.article.sql(將數據庫news中的author表和article表備份到author.article.sql文件, author.article.sql是一個文本文件,文件名任取。)

  mysqldump --databases db1 db2 > news.sql(將數據庫dbl和db2備份到news.sql文件,news.sql是一個文本文件,文件名任取。)

  mysqldump -h host -u user -p pass --databases dbname > file.dump

就是把host上的以名字user,口令pass的數據庫dbname導入到文件file.dump中

  mysqldump --all-databases > all-databases.sql(將全部數據庫備份到all-databases.sql文件,all-databases.sql是一個文本文件,文件名任取。)

三、導入數據

mysql < all-databases.sql(導入數據庫)

mysql>source news.sql;(在mysql命令下執行,可導入表)

9.鏈接MySQL  

  格式: mysql -h主機地址 -u用戶名 -p用戶密碼

一、例1:鏈接到本機上的MYSQL。

       首先在打開DOS窗口,而後進入目錄 mysqlbin,再鍵入命令mysql -uroot -p,回車後提示你輸密碼,若是剛安裝好MYSQL,超級用戶root是沒有密碼的,故直接回車便可進入到MYSQL中了,MYSQL的提示符是: mysql>。

二、例2:鏈接到遠程主機上的MYSQL。假設遠程主機的IP爲:110.110.110.110,用戶名爲root,密碼爲abcd123。則鍵入如下命令:

       mysql -h110.110.110.110 -uroot -pabcd123

       (注:u與root能夠不用加空格,其它也同樣)

三、退出MYSQL命令: exit (回車)。

11.修改密碼

       格式:mysqladmin -u用戶名 -p舊密碼 password 新密碼

一、例1:給root加個密碼ab12。首先在DOS下進入目錄mysqlbin,而後鍵入如下命令:

       mysqladmin -uroot -password ab12

       注:由於開始時root沒有密碼,因此-p舊密碼一項就能夠省略了。

二、例2:再將root的密碼改成djg345。

       mysqladmin -uroot -pab12 password djg345

12.增長新用戶

       注意:和上面不一樣,下面的由於是MySQL環境中的命令,因此後面都帶一個分號做爲命令結束符。

       格式:grant select on 數據庫.* to 用戶名@登陸主機 identified by \"密碼\"

例一、增長一個用戶test1密碼爲abc,讓他能夠在任何主機上登陸,並對全部數據庫有查詢、插入、修改、刪除的權限。首先用以root用戶連入MySQL,而後鍵入如下命令:

grant select,insert,update,

delete on *.* to test1@\"%\" Identified by \"abc\";

       但例1增長的用戶是十分危險的,你想如某我的知道test1的密碼,那麼他就能夠在internet上的任何一臺電腦上登陸你的MySQL數據庫並對你的數據能夠隨心所欲了,解決辦法見例2。

例二、增長一個用戶test2密碼爲abc, 讓他只能夠在localhost上登陸,並能夠對數據庫mydb進行查詢、插入、修改、刪除的操做(localhost指本地主機,即MySQL數據庫所 在的那臺主機),這樣用戶即便用知道test2的密碼,他也沒法從internet上直接訪問數據 庫,只能經過MySQL主機上的web頁來訪問。

grant select,insert,update,

delete on mydb.* to test2@localhost identified by \"abc\";

       若是你不想test2有密碼,能夠再打一個命令將密碼消掉。

grant select,insert,update,delete on mydb.* to test2@localhost identified by \"\";

10、linux mysql常見問題一、Access denied for user 'root'@'localhost'

       系統是ubuntu6.06,最近新裝好的mysql在進入mysql工具時,老是有錯誤提示:

# mysql -uroot -p

Enter password:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

       使用網上介紹的方法修改root用戶的密碼:

# mysqladmin -uroot -p password 'newpassword'

Enter password:

mysqladmin: connect to server at 'localhost' failed

error: 'Access denied for user 'root'@'localhost' (using password: YES)'

       如今終於被我找到了解決方法,以下(請先測試方法三):

方法一:

# /etc/init.d/mysql stop

# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &

# mysql -u root mysql

mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';

mysql> FLUSH PRIVILEGES;

mysql> quit

# /etc/init.d/mysql restart

# mysql -uroot -p

Enter password: <輸入新設的密碼newpassword>

mysql>

方法二:

       直接使用/etc/mysql/debian.cnf文件中[client]節提供的用戶名和密碼:

# mysql -udebian-sys-maint -p

Enter password: <輸入[client]節的密碼>

mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';

mysql> FLUSH PRIVILEGES;

mysql> quit

 

# mysql -uroot -p

Enter password: <輸入新設的密碼newpassword>

mysql>

方法三:

# mysql -uroot -p

Enter password: <輸入/etc/mysql/debian.cnf文件中[client]節提供的密碼>

       至此,問題解決!

二、sqlplus鏈接mysql

       沒法查詢null字段,在$ORACLE_HOME/hs/admin/initmysql.ora文件中加入:HS_FDS_SQLLEN_INTERPRETATION=32便可。

       不能直接訪問mysql的int字段。在$ORACLE_HOME/hs/admin/initmysql.ora文件中加入:HS_FDS_FETCH_ROWS=1便可。

 

 

轉自:http://www.itpub.net/thread-1586924-1-1.html

相關文章
相關標籤/搜索