1. 程式人生 > >Linux之mysql伺服器基本使用(Linux帶著小弟shell去打怪)

Linux之mysql伺服器基本使用(Linux帶著小弟shell去打怪)

說明:此博文為,mysql伺服器複習筆記。此博文分享在複習過程中,實戰遇到的問題,具體的細節和術語準確度別糾結。

在這裡插入圖片描述

@author:拈花為何不一笑

MySQL伺服器管理(解除安裝,安裝,執行等)

1.首先刪除系統自帶的mysql(通常版本比較低)
	(1).先查詢當前linux系統是否已安裝了mysql
	使用命令: rpm -qa | grep -i mysql 或者 rpm -q mysql
	例如:
	[[email protected] ~]# rpm -qa | grep -i mysql	
	MySQL-python-1.2.3-0.3.c1.1.el6.i686
	mysql-server-5.1.47-4.el6.i686
	mysql-5.1.47-4.el6.i686
	mysql-devel-5.1.47-4.el6.i686
	qt-mysql-4.6.2-16.el6.i686
	mysql-libs-5.1.47-4.el6.i686
	perl-DBD-MySQL-4.013-3.el6.i686
	mysql-connector-odbc-5.1.5r1144-7.el6.i686
   [
[email protected]
~]# 2.解除安裝已安裝的舊版mysql和與之依賴的 使用命令: rpm -ev mysql-server-5.1.47-4.el6.i686 --nodeps 其中--nodeps選項表示忽略依賴解除安裝 例如: [[email protected] ~]# rpm -ev MySQL-python-1.2.3-0.3.c1.1.el6.i686 #使用解除安裝命令 [[email protected] ~]# rpm -qa | grep -i mysql #再查詢,發現MySQL-python-1.2.3-0.3.c1.1.el6.i686沒有了 mysql-server-5.1.47-4.el6.i686 mysql-5.1.47-4.el6.i686 mysql-devel-5.1.47-4.el6.i686 qt-mysql-4.6.2-16.el6.i686 mysql-libs-5.1.47-4.el6.i686 perl-DBD-MySQL-4.013-3.el6.i686 mysql-connector-odbc-5.1.5r1144-7.el6.i686 [
[email protected]
~]# 按照上面步驟把查詢出來與mysql相關的程式全部解除安裝掉( 大家注意到沒,本人是先解除安裝依賴再刪除mysql本身的解除安裝順序,當然咯這裡使用了--nodeps已經忽略了依賴) mysql-connector-odbc-5.1.5r1144-7.el6.i686 [[email protected] ~]# rpm -ev qt-mysql-4.6.2-16.el6.i686 --nodeps [[email protected] ~]# rpm -ev perl-DBD-MySQL-4.013-3.el6.i686 --nodeps [
[email protected]
~]# rpm -ev mysql-connector-odbc-5.1.5r1144-7.el6.i686 --nodeps [[email protected] ~]# rpm -ev mysql-server-5.1.47-4.el6.i686 --nodeps [[email protected] ~]# rpm -ev mysql-5.1.47-4.el6.i686 --nodeps [[email protected] ~]# rpm -ev mysql-devel-5.1.47-4.el6.i686 --nodeps [[email protected] ~]# rpm -ev mysql-libs-5.1.47-4.el6.i686 --nodeps [[email protected] ~]# rpm -qa | grep -i mysql #解除安裝完後,再查詢沒有了,說明解除安裝成功 [[email protected] ~]# [[email protected] ~]# whereis mysql mysql: [[email protected] ~]# which mysql /usr/bin/which: no mysql in (/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin) [[email protected] /]# find / -name mysql [[email protected] /]# 3.安裝指定版本的Mysql,依賴安裝,mysql啟動和訪問 (1)首先要準備安裝mysql的環境:比如gcc, gcc-c++, cmake, ncurses-devel, perl (2)查詢上面的工具是否安裝過: [[email protected] ~]# yum list installed | grep gcc.* compat-libgcc-296.i686 2.96-144.el6 @anaconda-centos-201106051823.i386/6.0 gcc.i686 4.4.4-13.el6 @anaconda-centos-201106051823.i386/6.0 gcc-c++.i686 4.4.4-13.el6 @anaconda-centos-201106051823.i386/6.0 gcc-gfortran.i686 4.4.4-13.el6 @anaconda-centos-201106051823.i386/6.0 libgcc.i686 4.4.4-13.el6 @anaconda-centos-201106051823.i386/6.0 [[email protected] ~]# 同樣的方式進行查詢: [[email protected] ~]# yum list installed | grep -i cmake #發現沒有輸出結果,表示沒有安裝cmake [[email protected] ~]# yum list installed | grep -i ncurses-devel #查詢出來了ncurses-devel,說明已經安裝了 ncurses-devel.i686 5.7-3.20090208.el6 [[email protected] ~]# yum list installed | grep -i perl mod_perl.i686 2.0.4-10.el6 @anaconda-centos-201106051823.i386/6.0 perl.i686 4:5.10.1-115.el6 (3)yum -y install gcc gcc-c++ ncurses-devel perl #一次把這幾個沒有安裝的程式都安裝,哪個安裝了的就從這條命令中去掉哪個 發現只有cmake沒有安裝,那安裝cmake (4)cmake 單獨安裝,使用原始碼安裝方式 cd /usr/local/src #進入一個目錄(目錄可以自己指定),用來安裝cmake 下載cmake-3.12.0.tar.gz tar -zvxf cmake-3.12.0.tar.gz #當前目錄下,解壓cmake-3.12.0.tar.gz包 cd cmake-3.12.0/ #進入解壓後的檔案目錄cmake-3.12.0下 ./configure #執行configure檔案對安裝環境進行檢驗並在當前目錄下生成編譯時所需檔案(如CMakefile.txt) #採用gcc4.4.4版本編譯時遇到提示譯器gcc不支援c++11 , 解決方案:更新至gcc/g++ 4.8版本或以上即可。 ./bootstrap #執行bootstrap檔案 make #編譯, Linux系統環境下的make就是GNU Make(gmake),是為了區別在Solaris系統或其他非GNU/linux系統中的make的編譯器而起的名字 make install #安裝 [[email protected] cmake-3.12.0]# cmake --version #檢視是否成功安裝,如果有下面資訊說明安裝成功了 cmake version 3.12.0 CMake suite maintained and supported by Kitware (kitware.com/cmake). (5) ===>> 方式一:已編譯的mysql壓縮包安裝 cd /usr/local/src #進入一個目錄(目錄可以自己指定),用來安裝mysql (5.1)下載,解壓 https://dev.mysql.com/downloads/mysql/#downloads #下載地址,這裡下載mysql-5.5.61-linux-glibc2.12-i686.tar.gz這個版本 #如果想下載其它版本,請點選右邊的Looking for previous GA versions? 下載成功後,mysql-5.5.61-linux-glibc2.12-i686.tar.gz上傳到linux系統 /usr/local/src目錄下 tar -zxvf mysql-5.5.61-linux-glibc2.12-i686.tar.gz #解壓 (5.2)建立mysql所需要的環境 cd /usr/local #進入linux系統預設安裝總目錄 mkdir mysql #建立mysql目錄作為mysql的安裝目錄 cd /usr/local/src/mysql-5.5.61-linux-glibc2.12-i686/ #進入mysql解壓後的目錄 [[email protected] mysql-5.5.61-linux-glibc2.12-i686]# cp ./ -r /usr/local/mysql #把當前目錄下所有資料拷貝至/usr/local/mysql目錄中 cat /etc/passwd | grep mysql #檢視mysql使用者是否存在linx系統中,如果存在則不需要建立了 cat /etc/groups | grep mysql #檢視mysql使用者組是否存在linx系統中,如果存在則不需要建立了 ###建立這兩個東西的目的是為了更好的管理mysql資料庫軟體### groupadd mysql #建立使用者組 useradd -r -g mysql mysql #建立使用者並指定所屬使用者組 (5.3)安裝mysql資料庫和屬主設定 cd /usr/local/mysql #進入mysql安裝目錄 chown -R mysql:mysql ./ #設定當mysql安裝目錄的屬主和所屬於使用者組 ./scripts/mysql_install_db --user=mysql #安裝mysql資料庫 chown -R root:root ./ #修改當前目錄歸屬為root:root chown -R mysql:mysql data #修改data目錄歸屬為mysql:mysql (5.4)新增開機啟動 [[email protected] mysql]# cp ./support-files/mysql.server /etc/init.d/mysqld #把mysql加入系統啟動,拷貝mysql.server並重命名為mysqld [[email protected] mysql]# cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld #把mysql加入系統啟動,拷貝mysql.server並重命名為mysqld chkconfig --list #查詢出所有的服務(相當於window下的服務管理中的服務),發現並沒有mysqld服務 chkconfig mysqld on #把mysqld加入到服務中開機啟動mysql伺服器。mysql.server執行時其實呼叫mysqld [[email protected] ~]# netstat -tupln | grep mysql #重啟linux系統,查詢發現mysql伺服器開機啟動成功 tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2147/mysqld [[email protected] ~]# (5.5)mysql啟動,關閉,重閉和設定mysql資料庫的root密碼(預設為空) [[email protected] local]# service mysqld start #啟動mysql Starting MySQL.. [[email protected] local]# netstat -tupln | grep -i mysql #檢視是否成功啟動mysql tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 24003/mysqld [[email protected] local]# ./mysql/bin/mysql -h localhost -P 3306 -u root -p #登陸mysql伺服器 Enter password: #直接回車,新安裝的mysql資料的root使用者密碼預設為空 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.5.61 MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is 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> quit #退出mysql伺服器 [[email protected] local]# mysql/bin/mysqladmin -u root password root #設定mysql資料庫root使用者的密碼 [[email protected] local]# ./mysql/bin/mysql -h localhost -P 3306 -u root -p Enter password: #不輸入密碼回車,報錯了。 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) [[email protected] local]# ./mysql/bin/mysql -h localhost -P 3306 -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.5.61 MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is 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> show databases; #使用mysql資料中提供的命令,操作mysql中的資料庫... ----------------------------------------------------- service mysqld start #啟動mysql service mysqld restart #重啟mysql service mysqld stop #啟動mysql ----------------------------------------------------- 說明:遇到一些問題 [[email protected] mysql]# service mysql start Starting MySQL.Logging to '/usr/local/mysql/data/jtxdsh-129.err'. cp support-files/mysql.server /etc/init.d/mysqld #新增mysqld 開機時啟動 [[email protected] mysql-5.5.61-linux-glibc2.12-i686]# service mysqld start --->問題1 /etc/init.d/mysql: line 244: my_print_defaults: command not found /etc/init.d/mysql: line 264: cd: /usr/local/mysql: No such file or directory Starting MySQLCouldn't find MySQL server (/usr/local/mysql/[失敗]sqld_safe) [[email protected] mysql-5.5.61-linux-glibc2.12-i686]# cd /usr/local 上面提示非常清楚的告訴了你,在執行mysql.server時需要在目錄 /usr/local/mysql中進行相關操作 cd /usr/local && ls #發現並沒有/usr/local/mysql這個目錄(linux中/usr/local目錄下預設為軟體安裝目錄) mkdir mysql #在/usr/local目錄下建立目錄mysql(這個目錄是用來存放安裝程式的,將mysql包被解壓後的資料拷貝至/usr/local/mysql目錄中) [[email protected] mysql]# cd /usr/local/src/mysql-5.5.61-linux-glibc2.12-i686/ #進入mysql安裝目錄, [[email protected] mysql-5.5.61-linux-glibc2.12-i686]# cp ./ -r /usr/local/mysql #並把當前目錄下所有資料拷貝至/usr/local/mysql目錄中 設定好許可權或歸屬後 [[email protected] mysql]# service mysqld start --->問題2 Starting MySQL.Logging to '/usr/local/mysql/data/jtxdsh-129.err'. [[email protected] mysql]# cat /usr/local/mysql/data/jtxdsh-129.err #發現磁碟空間不夠,Database寫失敗 ... InnoDB: a new database to be created! 181222 14:19:16 InnoDB: Setting file ./ibdata1 size to 10 MB InnoDB: Database physically writes the file full: wait... #發現磁碟空間不夠,Database寫失敗(df -h,刪除一些無用的資料即可解決) 181222 14:19:16 InnoDB: Log file ./ib_logfile0 did not exist: new to be created InnoDB: Setting log file ./ib_logfile0 size to 5 MB .... [[email protected] local]# service mysqld start -->成功啟動mysql Starting MySQL.. [確定] [[email protected] local]# netstat -tupln | grep -i mysql tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 24003/mysqld [[email protected] local]# mysql -h localhost -P 3306 -u root -p #問題3,重啟linux系統後,直接登陸mysql伺服器,報錯.(應該先開mysql服務即啟動mysql伺服器) Enter password: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 本地不能登陸,而遠端可以登陸mysql伺服器--->問題4 是因為有一個空使用者:''@locahost (''表示使用者名稱,@是一個符號,localhost表示主機host) 遠端客戶端(這裡指windows系統)登陸mysql伺服器(linux中安裝的mysql伺服器),來刪除空使用者,即可解決此問題。 這個空使用者導致本地不能登陸linux,或使用者不需要輸入密碼就直接可以登陸,mysql -h localhost -u root即可登陸,但是資料不一樣。 mysql> select user,host,password from mysql.user; (遠端windows系統,相對於linux是遠端,參照物:安裝了mysql的linux系統) +------+------------+-------------------------------------------+ | user | host | password | +------+------------+-------------------------------------------+ | root | % | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | root | jtxdsh-129 | | | root | 127.0.0.1 | | | root | ::1 | | | | localhost | | | | jtxdsh-129 | | +------+------------+-------------------------------------------+ 6 rows in set (0.02 sec) mysql> drop user ''@localhost; #在windows系統下刪除空使用者 Query OK, 0 rows affected (0.00 sec) mysql> select user,host,password from mysql.user; +------+------------+-------------------------------------------+ | user | host | password | +------+------------+-------------------------------------------+ | root | % | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | root | jtxdsh-129 | | | root | 127.0.0.1 | | | root | ::1 | | | | jtxdsh-129 | | +------+------------+-------------------------------------------+ 5 rows in set (0.00 sec) mysql> (5.6)設定mysql客戶端軟連結(設定軟連結,使其在任意目錄下直接使用mysql的客戶端命令mysql -h localhost ...命令登陸,否則會報錯找不到mysql command) (a)未設定軟連結前,直接使用mysql命令,報錯。(如果想使用得到mysql所在目錄下/usr/local/mysql/bin/mysql才能使用,這個跟windows上的原理是一樣的) [[email protected] local]# mysql -h localhost -u root -P3306 -p -bash: mysql: command not found ===>>>> 設定軟連結 [[email protected] local]# ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql #建立mysql客戶端/usr/local/mysql/bin/mysql的軟連結/usr/local/bin/mysql (b)設定軟連結後,直接使用mysql命令登陸mysql伺服器,成功。 [[email protected] local]# mysql -h localhost -u root -P3306 -p Enter password: 。。。。 [[email protected] local]# ll /usr/local/bin 總用量 62156 -rwxr-xr-x. 1 root root 14498661 12月 22 11:49 ccmake -rwxr-xr-x. 1 root root 16003711 12月 22 11:49 cmake -rwxr-xr-x. 1 root root 15701488 12月 22 11:49 cpack -rwxr-xr-x. 1 root root 17215421 12月 22 11:49 ctest lrwxrwxrwx. 1 root root 26 12月 22 14:53 mysql -> /usr/local/mysql/bin/mysql -rwxr-xr-x. 1 root root 2363 10月 24 16:55 pcre-config -rwxr-xr-x. 1 root root 69899 10月 24 16:55 pcregrep -rwxr-xr-x. 1 root root 143323 10月 24 16:55 pcretest [[email protected] local]# 說明:mysql與mysqld的區別 -->>>位於 mysql安裝目錄/bin/{mysql,mysqld} 的兩個命令工具 mysql #就是通常用來登陸的命令,mysql is a command-line client for executing SQL statements interactively or in batch mode. mysqld #mysqld服務(啟動它就啟動了mysql),mysqld is the MySQL server. -->>>位於 mysql安裝目錄/support-files/mysql.server mysql.server #用於服務註冊和啟動服務(啟動mysql) (5.7)開牆mysql對外提供服務(開放mysql監聽的埠3306),遠端機器可以連線到本機的mysql伺服器(網路是可達的,ping 安裝mysql的機器的ip看看是否連通) [[email protected] local]# /sbin/iptables -L -n | grep 3306 #發現沒有開牆 [[email protected] local]# [[email protected] local]# vim /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT #新增這句,在-I FORWARD -m....前面新增此句 service iptables restart #重啟防火牆服務iptables [[email protected]txdsh-129 local]# mysql -h 192.168.179.129 -P 3306 -u root -p #模擬遠端登陸mysql伺服器,要求'root'@'jtxdsh-129' Enter password: ERROR 1045 (28000): Access denied for user 'root'@'jtxdsh-129' (using password: YES) 需要更新mysql使用者表中的一個host欄位為%,這樣才能夠遠端訪問mysql伺服器 update user set host = '%' where user = 'root'; commit; #手動提交事務(防止關閉事務,進行修改時不能自動提交) flush privileges; #重新整理下許可權(這個不能少,否則還是不能遠端登陸) 在本地使用mysql客戶端命令mysql遠端連線mysql伺服器 (安裝了mysql伺服器的bin目錄下都有這個客戶端mysql命令,也可以通常客戶端工具:比如SQLyog/EMS for MySQL/MySQLQueryBrowser) 比如在本地windows系統中連線遠端的mysql伺服器 進入本地windows的cmd環境中,Win+r -->輸入cmd 回車 C:\Users\Administrator.PCNH>cd d:\mysql\bin #進入本地window中安裝的mysql的bin目錄下,目的是使用客戶端命令mysl來連線遠端mysl C:\Users\Administrator.PCNH>d: d:\mysql\bin>mysql -h 192.168.179.129 -P 3306 -u root -p #使用mysql命令連線192.168.179.129機器上的mysql伺服器 Enter password: **** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 5.5.61 MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is 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> show databases; (5.8)mysql配置檔案常用屬性/引數/選項 mysql安裝目錄/support-files 目錄下存放著mysql的配置檔案,如下: -rw-r--r--. 1 root root 19759 12月 22 13:58 my-innodb-heavy-4G.cnf -rw-r--r--. 1 root root 4665 12月 22 13:58 my-large.cnf -rw-r--r--. 1 root root 4676 12月 22 13:58 my-medium.cnf -rw-r--r--. 1 root root 2840 12月 22 13:58 my-small.cnf [email protected] support-files]# cat my-small.cnf |less #檢視一下配置檔案 touch my.cnf #建立一個自定義的配置檔案 mysql配置檔案中的內容通常分四大類: client、mysqld、 mysqldump和 mysqlhotcopy (5)===>> 方式二:原始碼方式安裝mysql( 如果使用的是未編譯的mysql軟體包,則需要cmake進行編譯和安裝。) (5.1)建立Mysql所需要的環境(建立mysql的安裝目錄,mysql資料庫檔案儲存目錄,mysql使用者和組) ###建立這兩個東西的目的是為了更好的管理mysql資料庫軟體### cat /etc/passwd | grep mysql #檢視mysql使用者是否存在linx系統中,如果存在則不需要建立了 cat /etc/groups | grep mysql #檢視mysql使用者組是否存在linx系統中,如果存在則不需要建立了 groupadd mysql #建立使用者組 useradd -r -g mysql mysql #建立使用者並指定所屬使用者組 ### 建立安裝mysql時所需要的兩個目錄,如果不指定則使用預設的目錄### mkdir mysql #建立mysql安裝目錄 mkdir mysql/data #建立mysql儲存資料的目錄 (5.2)安裝mysql資料庫 #進入mysql安裝目錄 cd /usr/local/src/mysql #修改當前目錄的屬主為mysql,使用者組為mysql chown -R mysql:mysql ./ #語法:chown -R 使用者名稱:組名 ./ ,表示把當前目錄下的所有資源的歸屬更改為(或設定成)當前mysql使用者和mysql使用者組 #安裝mysql資料庫 ./scripts/mysql_install_db --user=mysql --basedir=/home/usr/local/src/mysql --datadir=/home/usr/local/src/mysql/data #修改當前目錄歸屬為root:root chown -R root:root ./ #修改data目錄歸屬為mysql:mysql chown -R mysql:mysql data (5.3)新增mysql啟動服務和啟動mysql cp support-files/mysql.server /etc/init.d/mysql #新增mysql 開機時啟動 service mysql start #開啟mysql服務,即啟動mysql (5.4)修改mysql的root使用者密碼(安裝成功後,root使用者預設密碼為空) [[email protected] local]# mysql/bin/mysqladmin -u root password root #進入mysql安裝目錄的bin目錄下,設定mysql資料庫root使用者的密碼 (5.5 )設定Mysql配置檔案常用選項或屬性 mysql安裝目錄/support-files 目錄下存放著mysql的配置檔案,如下: -rw-r--r--. 1 root root 19759 12月 22 13:58 my-innodb-heavy-4G.cnf -rw-r--r--. 1 root root 4665 12月 22 13:58 my-large.cnf -rw-r--r--. 1 root root 4676 12月 22 13:58 my-medium.cnf -rw-r--r--. 1 root root 2840 12月 22 13:58 my-small.cnf [email protected] support-files]# cat my-small.cnf |less #檢視一下配置檔案 touch my.cnf #建立一個自定義的配置檔案

Mysql伺服器基本使用,希望能夠幫助到大家。