MYSQL數據庫遷移到ORACLE數據庫


一、環境和需求
1、環境 

MySQL數據庫服務器:

OS version:Linux 5.3 for 64 bit

mysql Server version: 5.0.45

Oracle數據庫服務器:

OS version:linux 5.3 for 64 bit

oracle version:oracle 11g r2

2、需求

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

二、mysql數據恢復

       采用先把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數據庫,則這一步可以省略。

三、通過oracel sql developer轉換數據庫

       Mysql轉到oracle數據庫,要根據不同情況選擇不同的方法:

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

這是不用恢復mysql數據庫,直接可以用sql developer轉到oracle里,這時要現在oracle數據庫中建好用戶(用戶名為mysql數據庫名),選好默認表空間,mysql數據就會導入到該用戶下。

2、  從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表空間爆滿影響數據導入。

1、安裝oracel sql developer

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

 

    安裝的第一步會讓你選擇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配置:

 

 

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

    如果要連接sql server,則下載jtds-1.2.5-dist.zip配置即可。

2、連接數據庫

       連接oracle的用戶要有create table權限,一般用system用戶就可以。連mysql數據庫因為是讀取數據,用什么用戶都可以(一般默認是root用戶)。

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

打開sqldeveloper.exe:

 

新建oracle數據庫連接:

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

 

點擊測試,測試連接:

 

點擊保存:

 

點擊連接,即可連接到oracle數據庫:

 

新建mysql數據庫連接:

1.)選擇mysql選項卡

 

2.)填寫mysql數據庫信息

 

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

 

3、復制表

       如果不用遷移整個數據,只是遷移表的數據,則可以直接在mysql數據庫庫中選中要轉移的表,點“右鍵”選“復制到oracle”即可。此時會把表轉移到sql developer鏈接oracle數據庫的用戶下,並且該用戶下不能有同名的表。

       不過從以往的經驗看,復制表要比遷移數據庫效率低,所以如果是復制所有的表,最好用移植數據庫功能。

4、移植數據庫

點擊“工具”,選擇“移植”

 

移植簡介

 

 

 

 

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

 

 

指定轉換規則,可以根據自己的情況設定字段屬性的轉換,也可以新添加規則。不過一般選擇默認的就能滿足需求。

 

選擇目標數據庫

 

 

查看轉換概要,點擊“完成”開始轉換

 

 

 

       轉換完成后需要檢查數據庫的各種對象是否完成,狀態是否正確,尤其是表的數量一定要核對,因為有時候有些表會不能成功轉換,需要手工操作。

四、修改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;

1、 查看用戶的user#

SQL> show user

USER is "SYSTEM"

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

      USER# NAME

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

        93 TEST

2、修改用戶名

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

   已更新 1 行。

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

3、提交完成

SQL> COMMIT;

4、修改系統檢查點

SQL> ALTER SYSTEM CHECKPOINT;

5、修改新用戶密碼

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

6、如果提示新用戶不存在,則刷新shared_pool

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

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

SQL> ALTER SYSTEM FLUSH SHARED_POOL;

7、刷新shared_pool后重新修改用戶密碼

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

8、測試連接

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

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

SQL> SELECT * FROM TAB;

五、mysql遠程連接1、改表法

       可能是你的帳號不允許從遠程登陸,只能在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;

2、授權法

例如,你想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使修改生效,就可以了。

3、另外一種方法

  在安裝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的例外。

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

在用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:這俺就不形容了。

六、linux下mysql卸載和安裝1、MySQL RPM版本的安裝及卸載

1、前期准備

       由於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沒有密碼所以可以直接進入。

2、           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來測試一下,如果有反映,那就表明安裝成功了。

 

七、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 ;

八、mysql查看數據庫結構1、查看表信息

mysql> desc 表名;

mysql> show columns from 表名;

mysql> describe 表名;

mysql> show create table 表名;

mysql> use information_schema

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

2、查看數據庫

mysql> show databases;

mysql> use 數據庫名;

mysql> show tables;

3、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,再重做上一步才行。

4、查看存儲過程

mysql> show procedure status;

九、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的提示符下進行,而且每個命令以分號結束

1、顯示數據庫列表。

mysql> show databases;

2、顯示庫中的數據表:

mysql> use mysql; //打開庫

mysql> show tables;

3、顯示數據表的結構:

mysql> describe 表名;

4、建庫:

mysql> create database 庫名;

5、建表:

mysql> use 庫名;

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

6、刪庫和刪表:

mysql> drop database 庫名;

mysql> drop table 表名;

7、將表中記錄清空:

mysql> delete from 表名;

8、顯示表中的記錄:

mysql> select * from 表名;

9、編碼的修改

如果要改變整個mysql的編碼格式:  

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

--default-character-set=gbk  

如果要改變某個庫的編碼格式:在mysql提示符后輸入命令  

alter database db_name default character set gbk;

8.數據的導入導出

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

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

  1 name duty 2006-11-23

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

2、導出數據庫和表

  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是一個文本文件,文件名任取。)

3、導入數據

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

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

9.連接MySQL  

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

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

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

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

       mysql -h110.110.110.110 -uroot -pabcd123

       (注:u與root可以不用加空格,其它也一樣)

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

11.修改密碼

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

1、例1:給root加個密碼ab12。首先在DOS下進入目錄mysqlbin,然后鍵入以下命令:

       mysqladmin -uroot -password ab12

       注:因為開始時root沒有密碼,所以-p舊密碼一項就可以省略了。

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

       mysqladmin -uroot -pab12 password djg345

12.增加新用戶

       注意:和上面不同,下面的因為是MySQL環境中的命令,所以后面都帶一個分號作為命令結束符。

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

例1、增加一個用戶test1密碼為abc,讓他可以在任何主機上登錄,並對所有數據庫有查詢、插入、修改、刪除的權限。首先用以root用戶連入MySQL,然后鍵入以下命令:

grant select,insert,update,

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

       但例1增加的用戶是十分危險的,你想如某個人知道test1的密碼,那么他就可以在internet上的任何一台電腦上登錄你的MySQL數據庫並對你的數據可以為所欲為了,解決辦法見例2。

例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 \"\";

十、linux mysql常見問題1、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]節提供的密碼>

       至此,問題解決!

2、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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM