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)MySQLMySQL Server 5.0in>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