您好,登錄后才能下訂單哦!
無論你是編譯安裝,二進制安裝,還是yum,rpm,裝完mysql都是要初始化才能用.
下面來介紹下初始化安裝mysql,切記安裝前要準備好my.cnf文件~!怎么配置my.cnf,可以看我另一篇文章,有很多人為了照顧初學者,直接跳過my.cnf的配置說明,我覺得是不合理的,數據庫不是能用就好,是需要理解自己定義的好處和意義,真心建議大家先看那篇文章,找到自己想要的.
不過要注意的是,發行版和版本號的不同,有些參數會不同或不可用,會導致初始化失敗,這時需要去初始化的數據目錄查看mysql.err,看看那個參數有問題,然后屏蔽了,重新再初始化一次.
-前置步驟(已做就可以不用理會)
#創建數據目錄 mkdir -p /data/mysql/data #建立mysql用戶組,并更改權限 groupadd mysql useradd -g mysql -s /sbin/nologin mysql chown -R mysql.mysql /data/mysql/data mkdir /data/mysql/tmp chown -R mysql.mysql /data/mysql/tmp/ #拷貝服務啟動文件,yum和rpm安裝的可以不需要 cp -ar /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql #編輯my.cnf,可以看我另一篇文章來參考具體怎么設置,也可以用模板文件 cp -ar /usr/local/mysql/support-files/my-default.cnf /usr/local/mysql/my.cnf vim /usr/local/mysql/my.cnf
-注意:操作前要確保沒有其他mysql發行版干擾,特別是yum安裝的和rpm安裝,
#查看已安裝的rpm包中又沒有mysql和mariadb的安裝包 rpm -qa |grep -E 'mysql|mariadb' mariadb-libs-5.5.44-2.el7.centos.x86_64 #刪除查找出來的rpm安裝包 rpm -e --nodeps mariadb-libs-5.5.44-2.el7.centos.x86_64 rpm -e --nodeps mysql.x86_64
額外說明:--nodeps是不檢查依賴,不要害怕,即使有依賴你自己的安裝包都肯定有,做軟連接就好了
ln -s /usr/local/mysql/lib/libmysqlclient.so.20 /usr/lib64/libmysqlclient.so.18
要額外注意一個事情,如果存在~/.my.cnf和~/.mylogin.cnf,是默認先使用這個cnf配置文件的,并且是~/.my.cnf優先,就算你放到程序目錄并用--defaults-file選項指定配置文件,都是會優先走這里,不走你指定的。不過,一般情況下是不會出現這種情況,系統也不會默認把文件放進這里,所以出現這種奇葩情況,基本上只會是人為原因。
-------------------------這條分割線上面的無論是什么版本都要做~!--------------------------
-5.6及之前的版本初始化步驟(包括5.6)
確保mysql進程已停
service mysql stop
確保初始化的數據目錄沒有數據,由my.cnf定義的數據目錄
rm -rf /data/mysql/data/*
執行初始化腳本,添加參數,切記要先編輯好my.cnf
/usr/local/mysql/scripts/mysql_install_db --defaults-file=/usr/local/mysql/my.cnf --basedir=/usr/local/mysql/ --datadir=/data/mysql/data --user=mysql > /dev/null 2>&1
啟動mysql
service mysql start
初始化密碼
/usr/local/mysql/bin/mysqladmin -u root password '新密碼'
#初始化完成,嘗試登陸
/usr/local/mysql/bin/mysql -uroot -p'新密碼'
------------------------------我是分割線---------------------------------
-5.7之后用新方式初始化
確保mysql進程已停
service mysql stop
確保初始化的數據目錄沒有數據,由my.cnf定義的數據目錄
rm -rf /data/mysql/data/*
執行初始化命令,指定defaults-file且并必須放到最前面,切記要先編輯好my.cnf
mysqld --defaults-file=/usr/local/mysql/my.cnf --initialize
5.7的初始化采用了新的模式,雖然繁瑣一些,但是也更安全.
程序會自動生成密碼,不用這個密碼你就不能登錄,除非你進安全模式破密碼.
或者把參數--initialize換成--initialize-insecure,初始化后可以免密碼登錄,這里不細說,各位可以慢慢測試.
查看初始化后的密碼(密碼信息在行的最后)的方法,
密碼記錄在數據目錄的mysql.err里面,假設我的數據目錄定義是/data/mysql/data,所以密碼就應該是記錄在/data/mysql/data/mysql.err里面,我直接截取出來看了.
sed -n '/password/p' /data/mysql/data/mysql.err .....A temporary password is generated for root@localhost: GVedtgXDZ1-,
更改一下數據目錄的屬主權限,這種初始化方式并沒有改這個屬主問題,但是不改的話會啟動不了
chown -R mysql:mysql /data/mysql/data/
啟動mysql
service mysql start
密碼還要初始化,雖然初始化數據庫的時候已經有密碼,可以直接登錄,但是初始化還沒真正完成,不然會報錯,不斷提示你改密碼
mysql -uroot -p'GVedtgXDZ1-,'
由于5.7之后,系統用戶表有變化,直接用password是不行的,所以必須是下面的方法來這樣改,不然改不了
mysql> alter user 'root'@'localhost' identified by '123'; mysql> set password for 'root'@'localhost'=password('123'); mysql> update mysql.user set authentication_string=password('123') where user='root' and Host = 'localhost'; mysql> flush privileges;
這時候才算初始化完成,嘗試你設定的新密碼登錄吧
mysql -uroot -p'123'
-擴展閱讀:mysql 5.7增加了兩個字段password_last_changed、password_lifetime來完善安全策略,可以設置參數default_password_lifetime來延長使用期限
ALTER USER 'root'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAYS; ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER; ALTER USER 'root'@'localhost' PASSWORD EXPIRE DEFAULT;
---------------------------------我也是分割線-----------------------------------
-安全加固.
安全加固mysql數據庫(初始化后做最佳)
-5.6,5.7通用加固方式
1.刪除任何無關的管理員用戶和空密碼的管理員用戶,有需求再開
mysql> delete from mysql.user where user="root" and host!="localhost"; #在5.6的舊環境下,可能存在空密碼的用戶,這顯然不被允許,5.7則沒有這種用戶,可以不做 mysql> delete from mysql.user where user="root" and password=""; mysql> flush privileges;
2.刪除test庫(5.7沒了),因為這個庫默認是所有人都有權限讀寫,存在漏洞
mysql> drop database test;
3.刪除存放數據庫的表信息,因為本來就還沒有數據庫信息,萬一被注入就不好了。
mysql> delete from mysql.db;
4.SSL加密設置,用途就是把數據加密,防止被截取后破解,5.6要加ssl指定文件位置配置,5.7自動開,然后執行命令就可以了.
#執行命令,在數據目錄創建key文件,下面這個命令是封裝了整個創建過程,就不用做那么多復雜的事了 #不過這個命令文件是5.7新加入的,5.6中沒有這個命令文件,但是可以放到在5.6上面用,還算方便. /usr/local/mysql/bin/mysql_ssl_rsa_setup --datadir=/data/mysql/data/ #然后看看開啟了沒有 mysql>SHOW VARIABLES LIKE 'have_ssl'; | have_ssl | YES | #進入mysql,授權ssl專用用戶 mysql> grant all privileges on *.* to 'sslroot'@'%' identified by '123123' require ssl; #用ssl專用用戶登錄 mysql -usslroot -p'123123' -h227.0.0.1 #查看當前狀態,SSL已啟用 mysql> \s Current user: sslroot@127.0.0.1 SSL: Cipher in use is ECDHE-RSA-AES128-GCM-SHA256
不過開啟SSL需要謹慎,因為數據進行了加密處理,毫無疑問服務器需要消耗資源來校驗密文,官方說明可能會下降25%的性能,還是比較高的.
對于高并發的環境自然是性能下降明顯,除非安全要求非常高,不然不建議開,一般來說只要授權限制訪問IP是內網的就已經可以解決安全問題.
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。