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

0 or LOW

Length

1 or MEDIUM

Length; numeric, lowercase/uppercase, and special characters

2 or STRONG

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

posted @ 2018-07-16 20:17  NLBSN  阅读(480)  评论(0编辑  收藏  举报