安裝并配置MySQL數據庫
如果讀者沒有物理服務器環境,則可以搭建vmware等虛擬機環境學習,相應地則需準備如下內容:
1)請提前加大VM虛擬機硬件的內存,這樣編譯時候會更快,最好設置2GB以上的內存。
2)最好提前下載好要安裝的MySQL相關軟件包(http://mirrors.sohu.com/mysql/)。
3)重視每個操作過程的輸出,有錯誤要解決掉再繼續,不能忽略掉操作中的錯誤(error)。
4)建議進入虛擬機界面去執行make以及make install,通過SSH操作有時會導致網絡中斷。
有關vmware虛擬化學習軟件和CentOS6操作系統的安裝詳細步驟見《跟老男孩學Linux運維:Web集群實戰》,或看免費部署文章:http://book.51cto.com/art/201605/510756.htm。
當前的Linux系統環境情況如下:
[root@oldboy~]# cat /etc/redhat-release#<==操作系統版本
CentOSrelease 6.8 (Final)
[root@oldboy~]# uname -r#<==內核版本
2.6.32-642.el6.x86_64
[root@oldboy~]# uname -m
x86_64????????????????????????????????????#<==64位系統
(1)安裝MySQL需要的依賴包
安裝MySQL之前,最好先安裝MySQL需要的依賴包,不然后面會出現很多報錯信息,到那時還得再回來安裝MySQL的依賴包。安裝命令如下:
[root@oldboy~]# yum install ncurses-devel libaio-devel -y
[root@oldboy~]# rpm -qa ncurses-devel libaio-devel
ncurses-devel-5.7-4.20090207.el6.x86_64
libaio-devel-0.3.107-10.el6.x86_64
提示:安裝后使用rpm -qa ncurses-devel libaio-devel命令檢查,如果出現兩行如上信息表示安裝成功。
(2)安裝編譯MySQL需要的軟件
由于MySQL5.5及以上的系列產品要采用特殊的編譯方式安裝,因此,需要先安裝常用的編譯MySQL的工具cmake軟件包,命令為:
[root@oldboy~]# yum install cmake -y
[root@oldboy~]# rpm -qa cmake
cmake-2.8.12.2-4.el6.x86_64
提示:安裝后使用rpm-qa cmake檢查,如果出現一行如上信息表示安裝成功。
此外,也有網友采用源碼包的方式安裝cmake的,但比較復雜,因此一般建議讀者選擇這個簡單的yum安裝方法。
為了讓大家學習更多的MySQL技術,本文選擇了相對復雜的源代碼安裝方式為例來講解MySQL多實例安裝,大型公司一般都會將MySQL軟件定制成rpm包,然后放到yum倉庫里,使用yum安裝,中小企業里的二進制和編譯安裝的區別不大。
使用二進制方式安裝MySQL方法見http://oldboy.blog.51cto.com/2561410/1893734。
首先以root身份登錄到Linux系統中,然后執行如下命令創建mysql用戶賬號:
[root@oldboy~]# useradd -s /sbin/nologin -M mysql#<==默認會創建和mysql用戶同名的組。
[root@oldboy~]# id mysql
uid=500(mysql)gid=500(mysql) groups=500(mysql)
根據上述結果輸出,可以看到mysql用戶和組已經成功創建。
MySQL軟件包的下載地址為:http://dev.mysql.com/downloads/mysql/(如果地址變更無法下載,可以去http://mirrors.sohu.com/mysql下載)。可以把軟件下載到客戶端電腦本地后,使用rz等工具傳到Linux里,或者找到網絡下載地址后,直接在Linux里使用wget下載。
提示:本例以MySQL編譯的方式來講解,使用二進制方式安裝的完整過程在本文結尾會提供給大家。在生產場景中,二進制和源碼包兩種安裝方法都是可以用的,其應用場景一般沒什么太大差別。不同之處在于,二進制的安裝包較大,名字和源碼包也有些區別,二進制的安裝過程比源碼更快。
MySQL源碼包和二進制安裝包的名稱見表3-1。
表3-1MySQL二進制和源碼包
MySQL軟件軟件名
MySQL源碼安裝包mysql-5.6.34.tar.gz(本章選擇的安裝包)
MySQL二進制安裝包mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz
配置及編譯安裝的步驟如下:
第一步,下載mysql軟件包。
[root@oldboy~]# mkdir -p /home/oldboy/tools
[root@oldboy~]# cd /home/oldboy/tools/
[root@oldboytools]# wget -qhttp://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.34.tar.gz
[root@oldboytools]# ls -lh
total31M
-rw-r--r--.1 root root 31M Nov 28 07:46 mysql-5.6.34.tar.gz
第二步,解壓配置mysql,命令如下:
[root@oldboytools]# tar xf mysql-5.6.34.tar.gz
[root@oldboytools]# cd mysql-5.6.34
[root@oldboytools]# cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.34 \
-DMYSQL_DATADIR=/application/mysql-5.6.34/data\
-DMYSQL_UNIX_ADDR=/application/mysql-5.6.34/tmp/mysql.sock\
-DDEFAULT_CHARSET=utf8\
-DDEFAULT_COLLATION=utf8_general_ci\
-DWITH_EXTRA_CHARSETS=all\
-DWITH_INNOBASE_STORAGE_ENGINE=1\
-DWITH_FEDERATED_STORAGE_ENGINE=1\
-DWITH_BLACKHOLE_STORAGE_ENGINE=1\
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1\
-DWITH_ZLIB=bundled\
-DWITH_SSL=bundled\
-DENABLED_LOCAL_INFILE=1\
-DWITH_EMBEDDED_SERVER=1\
-DENABLE_DOWNLOADS=1\
-DWITH_DEBUG=0
提示:
1)編譯時可配置的選項很多,常見的參數選項見本章最后一部分內容,更詳細的可參考本章結尾附錄講解。
2)編譯MySQL需要安裝gcc等工具,此部分在安裝操作系統時已經安裝上了,具體參考CentOS6操作系統的安裝詳細步驟,見《跟老男孩學Linux運維:Web集群實戰》書或免費部署文章http://book.51cto.com/art/201605/510756.htm。
第三步,編譯安裝MySQL,命令如下:
[root@oldboymysql-5.6.34]# make#<==如果是多核cpu,可指定make -jcpu核數,加快編譯速度。
[root@oldboymysql-5.6.34]# make install
第四步,為MySQL安裝路徑設置不帶版本號的軟鏈接/application/mysql,操作命令如下:
[root@oldboymysql-5.6.34]# ln -s /application/mysql-5.6.34/ /application/mysql
#補充:如果系統里有曾經安裝的數據庫文件和啟動程序最好停掉或刪除,以免沖突。
[root@oldboymysql-5.6.34]# ls -l /application/
total 4
lrwxrwxrwx.? 1 root root??26 Feb 26 17:49mysql-> /application/mysql-5.6.34/
drwxr-xr-x.13 root root 4096 Feb 26 17:49 mysql-5.6.34
[root@oldboymysql-5.6.34]# ls /application/mysql/
bin? COPYING?data? docs? include?lib? man? mysql-test?README? scripts? share?sql-bench? support-files
如果上述操作未出現錯誤(每個步驟結束后,都可以使用echo $?看返回值是否為0,為0則表示正確),查看/application/mysql/目錄,若其下有內容,則表示MySQL5.6.34源代碼包采用cmake方式安裝成功了。
MySQL5.5數據庫默認為用戶提供了多個配置文件模板,但是MySQL5.6的support-files目錄下已經沒有配置文件模板了。
[root@oldboymysql-5.6.34]# ll support-files/*.cnf
-rw-r--r--.1 root root 1126 Feb 26 17:54 support-files/my-default.cnf
[root@oldboymysql-5.6.34]# mv /etc/my.cnf /etc/my.cnf.bak
#提示:在CentOS6.8版操作系統最小化安裝完成后,在/etc目錄下會存在一個my.cnf,需要將此文件更名為其他的名字,如:/etc/my.cnf.bak,否則,該文件會干擾源碼安裝的MySQL的正確配置,造成無法啟動。
#在啟動MySQL服務時,會按照一定的順序搜索my.cnf,先在/etc目錄下找,找不到則會搜索"$basedir/my.cnf",在本例中就是/application/mysql-5.6.34/my.cnf,這是新版MySQL的配置文件的默認位置!
[root@oldboymysql-5.6.34]# cp support-files/my-default.cnf /application/mysql-5.6.34/my.cnf
提示:此行操作可以省略,在下文初始化mysql時會自動生成my.cnf模板文件,如果已經執行上述命令,則初始化后會生成my-new.cnf文件,my.cnf和my-new.cnf除了注釋以外是一致的。
[root@oldboymysql-5.6.34]# chown -R mysql.mysql /application/mysql/
#<==授權mysql用戶管理mysql的安裝目錄。
關于更多mysql my.cnf參數的說明及調優,請參看本書后面章節。
上述配置完畢后,就可以初始化數據庫文件了,這個步驟其實也可以在編譯安裝MySQL之后就操作,只不過放到這里更合理一些。
(1)初始化MySQL數據庫
初始化數據庫的核心命令為:
/application/mysql/scripts/mysql_install_db --basedir=/application/mysql/--datadir=/application/mysql/data --user=mysql
提示:--basedir=/application/mysql/為MySQL的安裝路徑,--datadir為數據文件目錄。另,注意mysql_install_db和MySQL5.1的路徑不同,MySQL5.1不在MySQL bin路徑下了。
整個初始化的操作過程為:
[root@oldboy mysql-5.6.34]#/application/mysql/scripts/mysql_install_db --basedir=/application/mysql/--datadir=/application/mysql/data --user=mysql
#<==初始化mysql數據庫文件,會有很多信息提示,如果沒有ERROR級別的錯誤,有兩個OK的字樣,表示初始化成功,否則就要解決初始化的問題。
InstallingMySQL system tables...2017-02-26 18:08:53 0 [Warning] TIMESTAMP with implicitDEFAULT value is deprecated. Please use --explicit_defaults_for_timestampserver option (see documentation for more details).
2017-02-2618:08:53 0 [Note] Ignoring --secure-file-priv value as server is running with--bootstrap.
2017-02-2618:08:53 0 [Note] /application/mysql//bin/mysqld (mysqld 5.6.34) starting asprocess 47993 ...
2017-02-2618:08:53 47993 [Note] InnoDB: Using atomics to ref count buffer pool pages
2017-02-2618:08:53 47993 [Note] InnoDB: The InnoDB memory heap is disabled
2017-02-2618:08:53 47993 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2017-02-2618:08:53 47993 [Note] InnoDB: Memory barrier is not used
2017-02-2618:08:53 47993 [Note] InnoDB: Compressed tables use zlib 1.2.3
2017-02-2618:08:53 47993 [Note] InnoDB: Using Linux native AIO
2017-02-2618:08:53 47993 [Note] InnoDB: Using CPU crc32 instructions
2017-02-2618:08:53 47993 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2017-02-2618:08:53 47993 [Note] InnoDB: Completed initialization of buffer pool
2017-02-2618:08:53 47993 [Note] InnoDB: The first specified data file ./ibdata1 did notexist: a new database to be created!
2017-02-2618:08:53 47993 [Note] InnoDB: Setting file ./ibdata1 size to 12 MB
2017-02-2618:08:53 47993 [Note] InnoDB: Database physically writes the file full: wait...
...省略若干...
2017-02-2618:08:54 47993 [Note] InnoDB: Waiting for purge to start
2017-02-2618:08:54 47993 [Note] InnoDB: 5.6.34 started; log sequence number 0
2017-02-2618:08:54 47993 [Note] Binlog end
2017-02-2618:08:54 47993 [Note] InnoDB: FTS optimize thread exiting.
2017-02-2618:08:54 47993 [Note] InnoDB: Starting shutdown...
2017-02-2618:08:55 47993 [Note] InnoDB: Shutdown completed; log sequence number 1625977
OK#<==兩個OK是初始化成功的標志。
Fillinghelp tables...2017-02-26 18:08:55 0 [Warning] TIMESTAMP with implicit DEFAULTvalue is deprecated. Please use --explicit_defaults_for_timestamp server option(see documentation for more details).
2017-02-2618:08:55 0 [Note] Ignoring --secure-file-priv value as server is running with--bootstrap.
2017-02-2618:08:55 0 [Note] /application/mysql//bin/mysqld (mysqld 5.6.34) starting asprocess 48015 ...
2017-02-2618:08:55 48015 [Note] InnoDB: Using atomics to ref count buffer pool pages
2017-02-2618:08:55 48015 [Note] InnoDB: The InnoDB memory heap is disabled
...省略若干...
2017-02-2618:08:56 48015 [Note] InnoDB: FTS optimize thread exiting.
2017-02-2618:08:56 48015 [Note] InnoDB: Starting shutdown...
2017-02-2618:08:57 48015 [Note] InnoDB: Shutdown completed; log sequence number 1625987
OK#<==兩個OK是初始化成功的標志。
To startmysqld at boot time you have to copy
support-files/mysql.serverto the right place for your system
PLEASEREMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To doso, start the server, then issue the following commands:
/application/mysql//bin/mysqladmin-u root password 'new-password'
/application/mysql//bin/mysqladmin-u root -h oldboy password 'new-password'
Alternativelyyou can run:
/application/mysql//bin/mysql_secure_installation
whichwill also give you the option of removing the test
databasesand anonymous user created by default.?This is
stronglyrecommended for production servers.
See themanual for more instructions.
You canstart the MySQL daemon with:
cd . ;/application/mysql//bin/mysqld_safe &
You cantest the MySQL daemon with mysql-test-run.pl
cdmysql-test ; perl mysql-test-run.pl
Pleasereport any problems at http://bugs.mysql.com/
Thelatest information about MySQL is available on the web at
http://www.mysql.com
SupportMySQL by buying support/licenses at http://shop.mysql.com
###請注意如下幾行英文的說明
New default config file was createdas /application/mysql//my.cnf and
will be used by default by theserver when you start it.
You may edit this file to changeserver settings
#從上文說明中可以指導mysql的默認配置文件已經變到了/application/mysql//my.cnf
WARNING: Default config file/etc/my.cnf exists on the system
This file will be read by defaultby the MySQL server
If you do not want to use this,either remove it, or use the
--defaults-file argument tomysqld_safe when starting the server
#從上文說明中可以看到數據庫啟動時會讀取/etc/my.cnf,因此有可能會導致無法啟動,避免的方法就是使用mysqld_safe啟動服務時采用--defaults-file參數指定配置文件,前文已將/etc/my.cnf改名了,所以,就不需要指定參數了,這里是一個坑,讀者要注意。
此步驟必須要初始化成功,否則,后面會出現登錄不了數據庫等各種問題。
(2)初始化數據庫的原理及結果說明
初始化數據庫的實質就是創建基礎的數據庫系統的庫文件,例如:生成MySQL庫表等。
初始化數據庫后,查看數據目錄,可以看到多了如下文件:
[root@oldboymysql-5.6.34]# ls -l /application/mysql/data
total110604
-rw-rw----.1 mysql mysql 12582912 Feb 26 18:08 ibdata1
-rw-rw----.1 mysql mysql 50331648 Feb 26 18:08 ib_logfile0
-rw-rw----.1 mysql mysql 50331648 Feb 26 18:08 ib_logfile1
drwx------.2 mysql mysql?? ??4096 Feb 26 18:08 mysql#<==用于存放管理mysql的數據。
drwx------.2 mysql mysql???? 4096 Feb 26 18:08performance_schema?#<==5.5及以上增加的內部性能庫。
drwxr-xr-x.2 mysql mysql???? 4096 Feb 26 17:48test#<==用于測試的test數據庫。
[root@oldboymysql-5.6.34]# tree /application/mysql/data#<==如果沒有tree,可以yuminstall tree?–y安裝
/application/mysql/data
├──ibdata1
├──ib_logfile0
├──ib_logfile1
├──mysql
│??├── columns_priv.frm
│??├── columns_priv.MYD
│??├── columns_priv.MYI
…省略若干…
│??├── general_log.CSV
│??├── general_log.frm
│??├── help_category.frm
│??├── procs_priv.frm
│??├── procs_priv.MYD
│??├── procs_priv.MYI
│??├── proxies_priv.frm
│??├── proxies_priv.MYD
│??├── proxies_priv.MYI
│??├── servers.frm
…省略若干…
│??├── time_zone_name.MYI
│??├── time_zone_transition.frm
│??├── time_zone_transition.MYD
│??├── time_zone_transition.MYI
│??├── time_zone_transition_type.frm
│??├── time_zone_transition_type.MYD
│??├── time_zone_transition_type.MYI
│??├── user.frm
│??├── user.MYD
│??└── user.MYI
├──performance_schema
│??├── accounts.frm
│??├── cond_instances.frm
│??├── db.opt
│??├── events_stages_current.frm
│??├── events_stages_history.frm
│??├── events_stages_history_long.frm
│??├──events_stages_summary_by_account_by_event_name.frm
…省略若干…
│??├── threads.frm
│??└── users.frm
└── test
??? └── db.opt
3directories, 136 files
(3)MySQL初始化故障排錯集錦
本節的所有故障必須要解除,否則,后面會出現登錄不了MySQL數據庫等各種問題,故障集錦見本章結尾內容
??1)設置MySQL啟動腳本
[root@oldboymysql-5.6.34]# pwd
/home/oldboy/tools/mysql-5.6.34
[root@oldboymysql-5.6.34]# cp support-files/mysql.server /etc/init.d/mysqld#<==拷貝mysql啟動腳本到mysql的命令路徑。
[root@oldboymysql-5.6.34]# chmod 700 /etc/init.d/mysqld#<==使腳本可執行。
[root@oldboymysql-5.6.34]# ls -l /etc/init.d/mysqld
-rwx------.1 root root 10929 Feb 26 18:26 /etc/init.d/mysqld
2)啟動MySQL數據庫
#<==這是啟動數據庫規范方法之一,還可以使用/application/mysql/bin/mysqld_safe--user=mysql &啟動。這個命令結尾?“&”符號作用是,在后臺執行mysql服務,這條命令執行完 還需要按下回車才能進入到命令行狀態。
#<==注意,如果已執行上面/etc/init.d/mysqld start啟動命令,還想嘗試下面mysqld_safe的命令,請先執行/etc/init.d/mysqld stop結束mysql進程。
[root@oldboymysql-5.6.34]# cd ~
[root@oldboymysql-5.6.34]# /etc/init.d/mysqld start
StartingMySQL. SUCCESS!
提示:禁止使用pkill、kill -9、killall -9等命令強制殺死數據庫,這會引起數據庫無法啟動等故障發生。企業中曾發生過的血的教訓案例請看http://oldboy.blog.51cto.com/2561410/1431161。
3)檢查MySQL數據庫是否啟動。
[root@oldboy~]# netstat -lntup|grep mysql
tcp??????? 0?????0 :::3306????????????? :::*????????????????? LISTEN????? 48065/mysqld?
如發現3306端口沒起來。請使用tail-100 /application/mysql/data/機器名.err檢查日志報錯進行調試。經常查看服務運行日志是個很好的習慣,也是高手的習慣,你要不要成為高手?嘿!
4)查看MySQL數據庫啟動結果日志。
[root@oldboy~]# tail /application/mysql/data/oldboy.err
2017-02-2617:38:36 48065 [Note] InnoDB: Waiting for purge to start
2017-02-2617:38:36 48065 [Note] InnoDB: 5.6.34 started; log sequence number 1625987
2017-02-2617:38:36 48065 [Warning] No existing UUID has been found, so we assume thatthis is the first time that this server has been started. Generating a newUUID: 4f94404a-fc74-11e6-8112-000c292ece3f.
2017-02-2617:38:36 48065 [Note] Server hostname (bind-address): '*'; port: 3306
2017-02-2617:38:36 48065 [Note] IPv6 is available.
2017-02-2617:38:36 48065 [Note]?? - '::' resolvesto '::';
2017-02-2617:38:36 48065 [Note] Server socket created on IP: '::'.
2017-02-2617:38:36 48065 [Note] Event Scheduler: Loaded 0 events
2017-02-2617:38:36 48065 [Note] /application/mysql-5.6.34/bin/mysqld: ready forconnections.
Version:'5.6.34'? socket:'/application/mysql-5.6.34/tmp/mysql.sock'?port: 3306? Source distribution
本例查看了錯誤日志的命令及錯誤日志中的內容,這里省略了大部分日志內容,只給了默認10行,如果有錯誤,一般會顯示error字樣。
5)設置MySQL開機自啟動。
[root@oldboy~]# chkconfig --add mysqld
[root@oldboy~]# chkconfig --list mysqld
mysqld???????? ?0:off??? ?1:off??? 2:on 3:on 4:on 5:on 6:off
此外,將啟動命令/etc/init.d/mysqld start放到/etc/rc.local里面實現開機自啟動也可。
若MySQL安裝及使用出現故障,可根據下面的分析思路進行檢查。
q?細看所有執行命令返回的屏幕輸出,不要忽略關鍵的輸出內容。
q?輔助查看系統日志/var/log/messages。
q?如果是MySQL關聯了其他服務,要同時查看相關服務的日志。
q?仔細閱讀,重新查看操作的步驟是否正確,書寫的命令及字符是不是都對。
經常查看各種服務運行日志是個很好的習慣,也是成長為高手的必經之路,你要不要成為高手?嘿!
如果不為MySQL的命令配置全局路徑,就無法直接在命令行輸入mysql這樣的命令,只能用全路徑命令(/application/mysql/bin/mysql),這種帶著路徑輸入命令的方式很麻煩。下面來看看配置的具體方法。
1)確認mysql命令所在的路徑。
[root@oldboy/]# ls /application/mysql/bin/mysql
/application/mysql/bin/mysql
2)在PATH變量前面增加/application/mysql/bin路徑,并追加到/etc/profile文件中。
[root@oldboy/]# echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile
#<==注意,echo后是單引號呦,雙引號是不行滴。
[root@oldboy/]# tail -1 /etc/profile
exportPATH=/application/mysql/bin:$PATH
[root@oldboy/]# source /etc/profile
#<==執行source使上一行添加到/etc/profile中,內容直接生效
#<==以上命令的用途為,定義mysql全局路徑,實現在任意路徑執行mysql命令。
[root@oldboy~]# echo $PATH
/application/mysql/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
#<==執行echo $PATH有/application/mysql/bin輸出表示配置成功。
提示:更簡單的設置方法為用下面命令做軟鏈接:ln -s /application/mysql/bin/* /usr/local/sbin/,把mysql命令所在路徑鏈接到全局路徑/usr/local/sbin/的下面。
要特別強調的是,務必把MySQL命令路徑放在PATH路徑中其他路徑的前面,否則,可能會導致使用的mysql等命令和編譯安裝的mysql命令不是同一個,進而產生錯誤。下面的網址中給出了因為MySQL路徑配置問題導致的錯誤案例:http://oldboy.blog.51cto.com/2561410/1122867,該錯誤實際上就是因為使用yum安裝的MySQL客戶端命令訪問了編譯安裝的服務端而導致的。
登錄并測試的命令如下:
[root@oldboy ~]# mysql#<==直接敲mysql就進入數據庫了,而且身份還是root。
Welcometo the MySQL monitor.? Commands end with; or \g.
YourMySQL connection id is 2
Serverversion: 5.6.34 Source distribution
Copyright(c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracleis a registered trademark of Oracle Corporation and/or its
affiliates.Other names may be trademarks of their respective
owners.
Type'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
提示:你還可以使用如下三種命令寫法登錄mysql:
mysql -uroot -p,
mysql -uroot,
mysql -uroot -p '密碼'
若出現登錄故障,可通過以下方法排查。
如果這里提示無法登錄,排除了數據庫啟動問題后,則很可能是數據庫初始化文件有問題。例如:
[root@oldboy ~]#?mysql
ERROR1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
解決辦法:重新初始化數據庫即可,此問題一般都是數據庫初始化問題,或者數據庫文件損壞,以及目錄權限問題。
mysql>show databases;#<==查看當前的數據庫
+--------------------+
|Database?????????? |
+--------------------+
|information_schema |
|mysql????????????? |
|performance_schema |
|test?????????????? |
+--------------------+
4 rowsin set (0.00 sec)
mysql>select user();#<==查看當前的登錄用戶
+----------------+
|user()???????? |
+----------------+
|root@localhost |
+----------------+
1 row inset (0.00 sec)
mysql>#<==快捷鍵ctrl+d,也可以使用quit或exit等。
MySQL安裝完成后,默認情況下,管理員賬號root是無密碼的,極不安全,必須要處理一下。
??? MySQL管理員的賬號root密碼默認為空,極不安全,可以通過mysqladmin命令為mysql不同實例的數據庫設置獨立的密碼。
[root@oldboy~]# mysqladmin -u root password 'oldboy123'#<==為root用戶設置密碼oldboy123。
Warning:Using a password on the command line interface can be insecure.#<==這里是一個警告,提醒用戶命令行放置密碼是不安全的,讀者盡量不要在命令行輸入密碼,而是采取交互式的輸入密碼。
[root@oldboy~]# mysql#<==無法直接輸入命令登錄了。
ERROR1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[root@oldboy~]# mysql -uroot -p#<==新的登錄方式,也可以直接帶密碼mysql -uroot -poldboy123。
Enterpassword:#<==輸入新密碼oldboy123,交互式輸入密碼不會記錄在命令記錄里,因此更安全。
Welcometo the MySQL monitor.? Commands end with; or \g.
YourMySQL connection id is 5
Serverversion: 5.6.34 Source distribution
Copyright(c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracleis a registered trademark of Oracle Corporation and/or its
affiliates.Other names may be trademarks of their respective
owners.
Type'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
讀者也可以執行mysql_secure_installation命令交互式地設置系統的用戶密碼。
mysql>select user,host from mysql.user;
+------+-----------+
| user |host????? |
+------+-----------+
| root |127.0.0.1 |
| root |::1?????? |
|????? | localhost |
| root |localhost |
|????? | oldboy??? |
| root |oldboy??? |
+------+-----------+
6 rowsin set (0.00 sec)
mysql>drop user root@'::1';
QueryOK, 0 rows affected (0.00 sec)
mysql>drop user root@'oldboy';
QueryOK, 0 rows affected (0.00 sec)
mysql>drop user ''@'oldboy';
QueryOK, 0 rows affected (0.00 sec)
mysql>drop user ''@'localhost';
QueryOK, 0 rows affected (0.00 sec)
mysql>select user,host from mysql.user;
+------+-----------+
| user |host????? |
+------+-----------+
| root |127.0.0.1 |
| root |localhost |
+------+-----------+
2 rowsin set (0.00 sec)
提示:對于drop命令及數據庫安全,后文會有詳細講解,此處不執行也可以。
有時用drop命令可能無法刪除對應用戶。比如,當數據庫內的host等字段為大寫及特殊Linux主機名時,刪除用戶就會遇到問題,例如:
mysql>drop user ' '@'MySQL';??
ERROR1396 (HY000): Operation DROP USER failed for ' '@'mysql'
可使用DML語句,并采用delete命令刪除來解決此問題,具體命令如下:
mysql>delete from mysql.user where user='' and host='MySQL';
QueryOK, 1 row affected (0.00 sec)
mysql>flush privileges;
QueryOK, 0 rows affected (0.00 sec)
mysql>drop database test;
QueryOK, 0 rows affected (0.00 sec)
mysql>show databases;
+--------------------+
|Database?????????? |
+--------------------+
|information_schema |
|mysql????????????? |
|performance_schema |
+--------------------+
3 rowsin set (0.00 sec)
有關更多的MySQL的安全措施,在后文會有更詳細的講解。