• 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)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

    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

  • 相关阅读:
    [Angular] HostListener Method Arguments
    [Docker] Create Docker Volumes for Persistent Storage
    [Algorithms] Binary Search Algorithm using TypeScript
    [Node] Setup an Nginx Proxy for a Node.js App
    [Node] Run Local DevDependencies from the Command Line with npx
    [HTML] Change an HTML5 input's placeholder color with CSS
    [Node] Run Any Version of a Node Tool with npx
    [Angular] Learn How To Use ng-template Inputs
    [Angular] Learn Angular Multi-Slot Content Projection
    Jquery读取URL参数
  • 原文地址:https://www.cnblogs.com/zzf0305/p/9319889.html
Copyright © 2020-2023  润新知