Mysql5.7.20安裝文檔
Mysql5.7.20安裝文檔
一、Linxu下數據庫的恢復和備份
當我們MySQL數據庫保存重要數據的時候,備份工作極為重要。本文介紹如何使用mysqldump備份和恢復數據,使用該方法,可以將數據庫中的數據備份成一個文本文件,也可將備份好的數據庫遷移到另一臺的服務器。(後面是實際操作的過程)
(1) 從命令行備份MySQL數據庫
在Linux操作系統中,我們可以使用mysqldump命令進行備份。該命令將連接MySQL服務器並創建SQL轉儲文件,該文件包含了重新創建數據庫所必需的所有SQL語句。該命令的基本語法如下:
$ mysqldump --opt -u [uname] -p[pass] [dbname] > [backupfile.sql]
[uname] 數據庫用戶名
[pass] 數據庫密碼
[dbname] 數據庫名
[backupfile.sql] 數據庫備份文件名
[--opt] mysqldump選項
例如:備份數據庫Tuixin到20131112.sql文件,你可以簡單地使用以下命令:
$ mysqldump -u root -p Tuixin > 20131112.sql
如果有必要一次導出所有的數據庫,可使用--all-databases選項,命令如下:
$ mysqldump -u root -p --all-databases > 20131112.sql
如果mysql數據庫較大,你可能希望能壓縮mysqldump導出的SQL文件,此時僅需使用如下的備份命令,並通過管道連接到gzip,此時便可導出gzip文件。
$ mysqldump -u root -p Tuixin | gzip -9 > 20131112.sql.gz
解壓縮方法如下:
$ gunzip 20131112.sql.gz
(2) 從命令行恢復MySQL數據庫
通過上面的方法,我們已經將數據庫Tuixin備份至20131112.sql文件,接下來,我們恢復Tuixin數據庫:
* 在目標機器上創建相應的數據庫名
* 使用mysql命令載入sql文件
$ mysql -u [uname] -p[pass] [db_to_restore] < [backupfile.sql]
例如,我們現在恢復20131112.sql文件到Tuixin數據庫:
$ mysql -u root -p Tuixin < 20131112.sql
如果是恢復壓縮的備份文件,可遵循以下格式:
$ gunzip < [backupfile.sql.gz] | mysql -u [uname] -p[pass] [dbname]
如果是恢復已經存在的數據庫,此時可使用mysqlimport命令,該命令的語法格式如下:
$ mysqlimport -u [uname] -p[pass] [dbname] [backupfile.sql]
實際操作步驟:
備份:
利用mysqldump的—all-databases參數可以一口氣把你數據庫root用戶下的所有數據庫一口氣導出到一個sql文件裏。然後,重裝系統後使用source命令可以再一口氣倒回來。
導出全部數據庫mysqldump -uroot -p --all-databases > sqlfile.sql
此操作會把數據庫服務器root用戶下的所有數據庫都導出來。如果回車後提示Enter Password:請輸入你的mysql root密碼。
導入:
1.登錄mysal:
mysql–u root –p
根據提示輸入密碼
然後:
Source 備份文件的路徑;
記得這句後面有分號哈。
二、MySQL5.7.20的下載
一、首先到官網下載吧:
https://www.mysql.com/downloads/
三、解壓並安裝:
#tar -xvf mysql-5.7.18-1.el6.x86_64.rpm-bundle.tar
解壓後有如下rpm:
安裝方式一:
cd 到解壓開的目錄
yum -y localinstall mysql*
安裝方式二:
#rpm -ivh mysql-community-server-5.7.18-1.el7.x86_64.rpm
可以采用這種一個包一個包的安裝方式,但是本人不推薦。
四、啟動並設置:
1、啟動
Centos6的啟動方法:
# service mysqld start
查看狀態
# service mysqld status
Centos7的啟動方法:
# systemctl start mysqld
查看狀態:
# systemctl status mysqld
2、首次啟動涉及的設置
這種方式安裝好後,會再my.cnf文件中自動生成一個密碼,執行看一下吧:
# cat /var/log/mysqld.log | grep password
2017-05-13T05:39:44.497086Z 1 [Note] A temporary password is generated for root@localhost: pKsO:Jin<4f%
密碼就是這麽復雜,復制吧,不然手輸還容易出錯。
登陸:#mysql -u root -p
Enter password:pKsO:Jin<4f%
登陸成功,但是這時候,還不能做任何事情。隨便你做什麽都會提示你:
ERROR 1820 (HY000): You must reset your passwordusing ALTER USER statement before executing this statement.
那就來reset吧:
mysql> SET PASSWORD = PASSWORD(‘Mysql5720‘);
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
(密碼過於簡單,必須大寫,小寫,數字,符號)
mysql> SET PASSWORD = PASSWORD(‘Mysql5720%‘);
Query OK, 0 rows affected, 1 warning (0.00 sec)
CREATE USER ‘root‘@‘%‘ IDENTIFIED BY ‘bigdata@2016‘;
CREATE USER ‘root‘@‘localhost‘ IDENTIFIED BY ‘bigdata@2016‘;
GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘%‘ IDENTIFIED BY ‘bigdata@2016‘;
GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘localhost‘ IDENTIFIED BY ‘bigdata@2016‘;
flush privileges;
好了,現在終於可以操作了:
mysql> create database roger;
Query OK, 1 row affected (0.01 sec)
mysql> use roger;
Database changed
mysql>
額外:一般自己裝個mysql就是用來測試的,結果密碼還那麽麻煩,哪天忘記了都有可能,想要設置簡單的密碼,把密碼安全級別設置低一點吧:
mysql> set global validate_password_policy=0;//0最低,1中級,2最強驗證級別
Query OK, 0 rows affected (0.00 sec)
五、授權遠程連接:
mysql>GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘%‘ IDENTIFIED BY ‘Mysql5720%‘ WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
這樣,我們就可以在其他電腦上的mysql客戶端遠程連接linux上的mysql數據庫了:(例如在win cmd裏面)
C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin>mysql -u root -pMysql5718% -h 192.168.231.8 -D roger
六、拓展:MySQL5.7.20的密碼設置修改
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
為了加強安全性,MySQL5.7為root用戶隨機生成了一個密碼,在error log中,關於error log的位置,如果安裝的是RPM包,則默認是/var/log/mysqld.log。
一般可通過log_error設置
mysql> select @@log_error;
+---------------------+
| @@log_error |
+---------------------+
| /var/log/mysqld.log |
+---------------------+
1 row in set (0.00 sec)
可通過# grep "password" /var/log/mysqld.log 命令獲取MySQL的臨時密碼
2016-01-19T05:16:36.218234Z 1 [Note] A temporary password is generated for root@localhost: waQ,qR%be2(5
用該密碼登錄到服務端後,必須馬上修改密碼,不然會報如下錯誤:
mysql> select user();
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
如果只是修改為一個簡單的密碼,會報以下錯誤:
mysql> ALTER USER USER() IDENTIFIED BY ‘12345678‘;
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
這個其實與validate_password_policy的值有關。
validate_password_policy有以下取值:
Policy |
Tests Performed |
|
Length |
|
Length; numeric, lowercase/uppercase, and special characters |
|
Length; numeric, lowercase/uppercase, and special characters; dictionary file |
默認是1,即MEDIUM,所以剛開始設置的密碼必須符合長度,且必須含有數字,小寫或大寫字母,特殊字符。
有時候,只是為了自己測試,不想密碼設置得那麽復雜,譬如說,我只想設置root的密碼為123456。
必須修改兩個全局參數:
首先,修改validate_password_policy參數的值
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)
這樣,判斷密碼的標準就基於密碼的長度了。這個由validate_password_length參數來決定。
mysql> select @@validate_password_length;
+----------------------------+
| @@validate_password_length |
+----------------------------+
| 8 |
+----------------------------+
1 row in set (0.00 sec)
validate_password_length參數默認為8,它有最小值的限制,最小值為:
validate_password_number_count
+ validate_password_special_char_count
+ (2 * validate_password_mixed_case_count)
其中,validate_password_number_count指定了密碼中數據的長度,validate_password_special_char_count指定了密碼中特殊字符的長度,validate_password_mixed_case_count指定了密碼中大小字母的長度。
這些參數,默認值均為1,所以validate_password_length最小值為4,如果你顯性指定validate_password_length的值小於4,盡管不會報錯,但validate_password_length的值將設為4。如下所示:
mysql> select @@validate_password_length;
+----------------------------+
| @@validate_password_length |
+----------------------------+
| 8 |
+----------------------------+
1 row in set (0.00 sec)
mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)
mysql> select @@validate_password_length;
+----------------------------+
| @@validate_password_length |
+----------------------------+
| 4 |
+----------------------------+
1 row in set (0.00 sec)
如果修改了validate_password_number_count,validate_password_special_char_count,validate_password_mixed_case_count中任何一個值,則validate_password_length將進行動態修改。
mysql> select @@validate_password_length;
+----------------------------+
| @@validate_password_length |
+----------------------------+
| 4 |
+----------------------------+
1 row in set (0.00 sec)
mysql> select @@validate_password_mixed_case_count;
+--------------------------------------+
| @@validate_password_mixed_case_count |
+--------------------------------------+
| 1 |
+--------------------------------------+
1 row in set (0.00 sec)
mysql> set global validate_password_mixed_case_count=2;
Query OK, 0 rows affected (0.00 sec)
mysql> select @@validate_password_mixed_case_count;
+--------------------------------------+
| @@validate_password_mixed_case_count |
+--------------------------------------+
| 2 |
+--------------------------------------+
1 row in set (0.00 sec)
mysql> select @@validate_password_length;
+----------------------------+
| @@validate_password_length |
+----------------------------+
| 6 |
+----------------------------+
1 row in set (0.00 sec)
當然,前提是validate_password插件必須已經安裝,MySQL5.7是默認安裝的。
那麽如何驗證validate_password插件是否安裝呢?可通過查看以下參數,如果沒有安裝,則輸出將為空。
mysql> SHOW VARIABLES LIKE ‘validate_password%‘;
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password_dictionary_file | |
| validate_password_length | 6 |
| validate_password_mixed_case_count | 2 |
| validate_password_number_count | 1 |
| validate_password_policy | LOW |
| validate_password_special_char_count | 1 |
+--------------------------------------+-------+
6 rows in set (0.00 sec)
七:附表:字符設置
[root@bianyi ~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted
security risks 這是完整的一句話,放不下,分成兩行了
symbolic-links=0
#default-character-set = utf8 在這個版本中,不要添加這一句,否則會引起字符設置沖突的問題,mysqld啟動不了
character_set_server=utf8
init_connect=‘SET NAMES utf8‘
[mysql]
default-character-set = utf8
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
default-character-set = utf8
[root@bianyi ~]#
八、安全快速修改Mysql數據庫名的5種方法
1. RENAME DATABASE db_name TO new_db_name
這個。。這個語法在mysql
5.1.7中被添加進來,到了5.1.23又去掉了。
據說有可能丟失數據。還是不要用的好。
詳見: http://dev.mysql.com/doc/refman/5.1/en/rename-database.html
2.如果所有表都是MyISAM類型的話,可以改文件夾的名字
關閉mysqld
把data目錄中的db_name目錄重命名為new_db_name
開啟mysqld
3.重命名所有的表
代碼如下:
CREATE DATABASE new_db_name;
RENAME TABLE db_name.table1 TO new_db_name.table1,
db_name.table2 TO new_db_name.table2;
DROP DATABASE db_name;
4. mysqldump導出數據再導入
代碼如下:
mysqldump -uxxxx -pxxxx -h xxxx
db_name > db_name_dump.SQL
mysql -uxxxx -pxxxx -h xxxx -e “CREATE DATABASE new_db_name”
mysql -uxxxx -pxxxx -h xxxx new_db_name < db_name_dump.SQL
mysql -uxxxx -pxxxx -h xxxx -e “DROP DATABASE db_name”
5.使用shell腳本重命名所有的表
代碼如下:
#!/bin/bash
mysqlconn=”mysql -u xxxx -pxxxx -S
/var/lib/mysql/mysql.sock -h localhost”
olddb=”db_name”
newdb=”new_db_name”
#$mysqlconn
-e “CREATE
DATABASE $newdb”
params=$($mysqlconn -N -e “SELECT TABLE_NAME FROM
INFORMATION_SCHEMA.TABLES WHERE table_schema=‘$olddb‘”)
for
name in $params; do
$mysqlconn -e “RENAME
TABLE $olddb.$name to $newdb.$name”;
done;
#$mysqlconn -e “DROP DATABASE $olddb”
就是方法3的優化版。
小編註:以上這些操作都是危險的,所以請在執行操作前,備份你的數據庫!!
九、卸載mysql數據庫
檢查之前是否安裝過mysql,刪除之前安裝的mysql
# rpm -qa | grep mysql
# rpm -e mysql-libs-5.1.71-1.el6.x86_64 --nodeps
# find / -name mysql
# rm -rf …
註意:卸載不了就強制卸載,--nodeps --force
Mysql5.7.20安裝文檔