zoukankan      html  css  js  c++  java
  • MySQL5.7初始配置

     MySQL5.7初始配置

     Windows7 环境安装MySQL5.7配置命令

    《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《

    MYSQL_HOME D:mysqlmysql-5.7.20-win32
    MYSQL_CONNECTOR_HOME D:mysqlmysql-connector-c-6.1.11-win32in

    PATH ;%MYSQL_HOME%in;%MYSQL_CONNECTOR_HOME%in

    ####################配置文件开始###################

    # For advice on how to change settings please see
    # http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
    # *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
    # *** default location during install, and will be replaced if you
    # *** upgrade to a newer version of MySQL.

    [mysqld]
    character-set-server = utf8

    bind-address = 0.0.0.0
    port = 3306

    basedir = "D:mysqlmysql-5.7.20-win32/"
    datadir = "D:mysqlmysql-5.7.20-win32/data/"
    tmpdir = "D:mysqlmysql-5.7.20-win32/data/"
    socket = "D:mysqlmysql-5.7.20-win32/data/mysql.sock"
    log-error = "D:mysqlmysql-5.7.20-win32/data/mysql_error.log"

    #server_id = 2

    #skip-locking

    max_connections = 100
    table_open_cache = 256
    query_cache_size = 1M
    tmp_table_size = 32M
    thread_cache_size = 8

    innodb_data_home_dir = "D:mysqlmysql-5.7.20-win32/data/"
    innodb_flush_log_at_trx_commit = 1
    innodb_log_buffer_size = 128M
    innodb_buffer_pool_size = 128M
    innodb_log_file_size = 10M
    innodb_thread_concurrency = 16
    innodb-autoextend-increment = 1000

    join_buffer_size = 128M
    sort_buffer_size = 32M
    read_rnd_buffer_size = 32M
    max_allowed_packet = 32M
    explicit_defaults_for_timestamp = true

    sql-mode = "STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

    #skip-grant-tables

    #sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

    [mysql]
    default-character-set=utf8

    [mysql.server]
    default-character-set=utf8

    [mysql_safe]
    default-character-set=utf8

    [client]

    ####################配置文件结束###################

    mysqld remove
    mysqld --install MySQL --defaults-file="D:mysqlmysql-5.7.20-win32my.ini"
    mysqld --initialize
    net start MySQL
    net stop mysql


    初始的随机密码可以在日志文件中找到(log-error = "D:mysqlmysql-5.7.20-win32/data/mysql_error.log")

    ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

    安装完mysql 之后,登陆以后,不管运行任何命令,总是提示这个
    step 1: SET PASSWORD = PASSWORD('your new password');
    step 2: ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
    step 3: flush privileges;

    完成以上三步退出再登,使用新设置的密码就行了,以上除了红色的自己修改成新密码外,其他原样输入即可
    参考1: https://dev.mysql.com/doc/refman/5.6/en/alter-user.html
    参考2: http://dev.mysql.com/doc/refman/5.7/en/password-expiration-policy.html
    参考3: http://stackoverflow.com/questions/33467337/reset-mysql-root-password-using-alter-user-statement-after-install-on-mac

    select user,host,authentication_string,password_expired from mysql.user;
    update mysql.user set authentication_string=password('qwe123') where user='root' and host='localhost';
    alter user 'root'@'localhost' identified by 'qwe123';
    FLUSH PRIVILEGES;

    》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

    MariaDB 安装配置

    下载地址 http://downloads.mariadb.com/MariaDB/mariadb-10.2.11/winx64-packages/

    # Example MariaDB config file for large systems.
    #
    # This is for a large system with memory = 512M where the system runs mainly
    # MariaDB.
    #
    # MariaDB programs look for option files in a set of
    # locations which depend on the deployment platform.
    # You can copy this option file to one of those
    # locations. For information about these locations, do:
    # 'my_print_defaults --help' and see what is printed under
    # Default options are read from the following files in the given order:
    # More information at: http://dev.mysql.com/doc/mysql/en/option-files.html
    #
    # In this file, you can use all long options that a program supports.
    # If you want to know which options a program supports, run the program
    # with the "--help" option.
    
    # The following options will be passed to all MariaDB clients
    
    ###############################
    
    # Installation steps: 
    # 1: mysqld --install MariaDB --defaults-file="D:mariadb-10.2.11-winx64my.ini"
    # 2: MySQL: mysqld --initialize
    #    MariaDB: mysql_install_db.exe --datadir="D:mariadb-10.2.11-winx64mydb"
    # 3: net start MariaDB
    # 4: net stop MariaDB
    
    # Update localhost root password:
    # 1: select user,host,authentication_string,password_expired from mysql.user; 
    # 2: update mysql.user set authentication_string=password('qwe123') where user='root' and host='localhost';
    # 3: alter user 'root'@'localhost' identified by 'qwe123';
    # 4: FLUSH PRIVILEGES;
    
    # Change the password to qwe123
    # 1: mysqladmin -u root -p password qwe123
    
    # Setting up root remote access
    # 1: mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'qwe123' WITH GRANT OPTION;
    # 2: mysql> FLUSH PRIVILEGES;
    
    # Create new database and user
    # 1: create database weblm character set utf8;
    # 2: grant all privileges on weblm.* to 'weblm'@'localhost' identified by 'weblm';
    # 3: flush privileges;
    
    ###############################
    
    
    [client]
    #password = your_password
    port = 3306
    socket = "D:mariadb-10.2.11-winx64/mydb/mysql.sock"
    
    default-character-set = utf8
    
    # Here follows entries for some specific programs
    
    # The MariaDB server
    [mysqld]
    port = 3306
    
    basedir = "D:mariadb-10.2.11-winx64"
    datadir = "D:mariadb-10.2.11-winx64/mydb/"
    tmpdir = "D:mariadb-10.2.11-winx64/mydb/"
    socket = "D:mariadb-10.2.11-winx64/mydb/mysql.sock"
    log-error = "D:mariadb-10.2.11-winx64/mydb/mysql_error.log"
    
    init_connect = 'SET collation_connection = utf8_unicode_ci'
    init_connect = 'SET NAMES utf8'
    character-set-server = utf8
    collation-server = utf8_unicode_ci
    skip-character-set-client-handshake
    
    skip-external-locking
    key_buffer_size = 256M
    max_allowed_packet = 1M
    table_open_cache = 256
    sort_buffer_size = 1M
    read_buffer_size = 1M
    read_rnd_buffer_size = 4M
    myisam_sort_buffer_size = 64M
    thread_cache_size = 8
    query_cache_size = 16M
    
    # Try number of CPU's*2 for thread_concurrency
    #thread_concurrency = 8
    
    # Point the following paths to different dedicated disks
    #tmpdir = /tmp/
    
    # Don't listen on a TCP/IP port at all. This can be a security enhancement,
    # if all processes that need to connect to mysqld run on the same host.
    # All interaction with mysqld must be made via Unix sockets or named pipes.
    # Note that using this option without enabling named pipes on Windows
    # (via the "enable-named-pipe" option) will render mysqld useless!
    # 
    #skip-networking
    
    # Replication Master Server (default)
    # binary logging is required for replication
    log-bin = mysql-bin
    
    # binary logging format - mixed recommended
    binlog_format = mixed
    
    # required unique id between 1 and 2^32 - 1
    # defaults to 1 if master-host is not set
    # but will not function as a master if omitted
    server-id = 1
    
    # Replication Slave (comment out master section to use this)
    #
    # To configure this host as a replication slave, you can choose between
    # two methods :
    #
    # 1) Use the CHANGE MASTER TO command (fully described in our manual) -
    #    the syntax is:
    #
    #    CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>,
    #    MASTER_USER=<user>, MASTER_PASSWORD=<password> ;
    #
    #    where you replace <host>, <user>, <password> by quoted strings and
    #    <port> by the master's port number (3306 by default).
    #
    #    Example:
    #
    #    CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306,
    #    MASTER_USER='joe', MASTER_PASSWORD='secret';
    #
    # OR
    #
    # 2) Set the variables below. However, in case you choose this method, then
    #    start replication for the first time (even unsuccessfully, for example
    #    if you mistyped the password in master-password and the slave fails to
    #    connect), the slave will create a master.info file, and any later
    #    change in this file to the variables' values below will be ignored and
    #    overridden by the content of the master.info file, unless you shutdown
    #    the slave server, delete master.info and restart the slaver server.
    #    For that reason, you may want to leave the lines below untouched
    #    (commented) and instead use CHANGE MASTER TO (see above)
    #
    # required unique id between 2 and 2^32 - 1
    # (and different from the master)
    # defaults to 2 if master-host is set
    # but will not function as a slave if omitted
    #server-id       = 2
    #
    # The replication master for this slave - required
    #master-host     =   <hostname>
    #
    # The username the slave will use for authentication when connecting
    # to the master - required
    #master-user     =   <username>
    #
    # The password the slave will authenticate with when connecting to
    # the master - required
    #master-password =   <password>
    #
    # The port the master is listening on.
    # optional - defaults to 3306
    #master-port     =  <port>
    #
    # binary logging - not required for slaves, but recommended
    #log-bin=mysql-bin
    
    # Uncomment the following if you are using InnoDB tables
    #innodb_data_home_dir = C:\mysql\data\
    #innodb_data_file_path = ibdata1:10M:autoextend
    #innodb_log_group_home_dir = C:\mysql\data\
    # You can set .._buffer_pool_size up to 50 - 80 %
    # of RAM but beware of setting memory usage too high
    #innodb_buffer_pool_size = 256M
    #innodb_additional_mem_pool_size = 20M
    # Set .._log_file_size to 25 % of buffer pool size
    #innodb_log_file_size = 64M
    #innodb_log_buffer_size = 8M
    #innodb_flush_log_at_trx_commit = 1
    #innodb_lock_wait_timeout = 50
    
    [mysqldump]
    quick
    max_allowed_packet = 16M
    
    [mysql]
    no-auto-rehash
    # Remove the next comment character if you are not familiar with SQL
    #safe-updates
    
    default-character-set = utf8
    
    [myisamchk]
    key_buffer_size = 128M
    sort_buffer_size = 128M
    read_buffer = 2M
    write_buffer = 2M
    
    [mysqlhotcopy]
    interactive-timeout
    
    ###############################

    安装后在/root目录下没有发现有.mysql_secret这个文件,所以没有没法按照官方文档上说的那样使用,这里记录下,

    解决方式:

    首先修改MySQL授权登录方式---(跳过授权验证方式启动MySQL):
    [root@test ~]# mysqld_safe --skip-grant-tables & [1] 3401 [root@test ~]# 2016-05-19T12:47:56.564385Z mysqld_safe Logging to '/var/log/mysqld.log'. 2016-05-19T12:47:56.589376Z mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
    检查MySQL启动情况 [root@test ~]# ps -ef | grep mysql root 3401 2880 0 20:47 pts/1 00:00:00 /bin/sh /usr/bin/mysqld_safe --skip-grant-tables mysql 3548 3401 0 20:47 pts/1 00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --skip-grant-tables --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
    这时登录MySQL不再需要验证
    [root@test ~]# mysql

    成功登录MySQL后:

    切换到mysql系统库:
    mysql> use mysql;
    
    修改root账户登录密码:
    mysql> update user set password=password('') where user='root';
    ERROR 1054 (42S22): Unknown column 'password' in 'field list'
    ---报错没有password这个数据字段列
    
    描述user表
    mysql> desc user;
    ...
    | authentication_string  | text                              | YES  |     | NULL                  |       |
    | password_expired       | enum('N','Y')                     | NO   |     | N                     |       |
    | password_last_changed  | timestamp                         | YES  |     | NULL                  |       |
    | password_lifetime      | smallint(5) unsigned              | YES  |     | NULL                  |       |
    | account_locked         | enum('N','Y')                     | NO   |     | N                     |       |
    +------------------------+-----------------------------------+------+-----+-----------------------+-------+
    ---没发现password列,但是找到这5个跟密码相关的数据字段
    
    查询一下相关的密码信息:
    mysql> select user,host,authentication_string,password_expired from user;
    +-----------+-----------+-------------------------------------------+------------------+
    | user      | host      | authentication_string                     | password_expired |
    +-----------+-----------+-------------------------------------------+------------------+
    | root      | localhost | *9AA01F6E2A80A823ACB72CC07337E2911404B5B8 | Y                |
    | mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | N                |
    +-----------+-----------+-------------------------------------------+------------------+
    ---到这里不难发现root账户的密码已过期,还比5.6多出了一个mysql.sys用户
    
    修改密码
    mysql> update user set authentication_string=password('123abc') where user='root';
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> exit

    密码修改成功,测试:

    重启MySQL:
    [root@test ~]# /etc/init.d/mysqld restart
    
    登录测试:
    [root@test ~]# mysql -p
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or g.
    Your MySQL connection id is 3
    Server version: 5.7.12-enterprise-commercial-advanced
    ...
    mysql> show databases;
    ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
    ---报错,需要使用alter user 修改密码
    mysql> alter user root@'localhost' identified by 'oracle'; ERROR 1819 (HY000): Your password does not satisfy the current policy requirements ---报错,密码不满足制定的密码负责度要求
    mysql> alter user 'root'@'localhost' identified by 'Abc!123D'; Query OK, 0 rows affected (0.01 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec)

     关于密码策略

    mysql> SHOW VARIABLES LIKE 'validate_password%';
    +--------------------------------------+--------+
    | Variable_name                        | Value  |
    +--------------------------------------+--------+
    | validate_password_dictionary_file    |        |
    | validate_password_length             | 8      |
    | validate_password_mixed_case_count   | 1      |
    | validate_password_number_count       | 1      |
    | validate_password_policy             | MEDIUM |
    | validate_password_special_char_count | 1      |
    +--------------------------------------+--------+
    6 rows in set (0.02 sec) 
    
    mysql> show plugins;
    +----------------------------+----------+--------------------+----------------------+-------------+
    | Name                       | Status   | Type               | Library              | License     |
    +----------------------------+----------+--------------------+----------------------+-------------+
    | binlog                     | ACTIVE   | STORAGE ENGINE     | NULL                 | PROPRIETARY |
    
    ...
    | validate_password          | ACTIVE   | VALIDATE PASSWORD  | validate_password.so | PROPRIETARY |
    +----------------------------+----------+--------------------+----------------------+-------------+
    ---可以通过在配置文件[mysqld]标签中添加 validate_passwor=off ,来关闭密码策略
    如下:
    ...
    | validate_password          | DISABLED | VALIDATE PASSWORD  | validate_password.so | PROPRIETARY |
    +----------------------------+----------+--------------------+----------------------+-------------+

    总结

    1) 安装好mysql后,第一次启动时,root管理密码会在/root/.mysql_secret中随机生成

    2) 至5.7后,MySQL的 mysql.user 表中的密码字段由之前的 password 改为 authentication_string

    3) 使用--skip-grant-tables 参数启动,跳过MySQL的授权验证,--skip-networking参数,跳过远程登录

    4) 修改MySQL密码方式:

    法1:update user set authentication_string=password('123abc') where user='root';

    法2:set password=password('newpassword');

    法3:alter user root@'localhost' identified by 'oracle';

    法4:在shell下使用MySQL工具:mysqladmin -uroot -poldpassword pasword "newpassword"

    5) 关于MySQL密码策略:

    决定是否使用该插件(及强制/永久强制使用)
    --validate-password=ON/OFF/FORCE/FORCE_PLUS_PERMANENT
     
    validate_password_dictionary_file           > 插件用于验证密码强度的字典文件路径。
    validate_password_length                        > 密码最小长度。
    validate_password_mixed_case_count     > 密码至少要包含的小写字母个数和大写字母个数。
    validate_password_number_count    > 密码至少要包含的数字个数。
    validate_password_policy                         > 密码强度检查等级,0/LOW、1/MEDIUM、2/STRONG
    validate_password_special_char_count    > 密码至少要包含的特殊字符数。
     
    其中关于validate_password_policy-密码强度检查等级:
    0/LOW    > 只检查长度
    1/MEDIUM      > 检查长度、数字、大小写、特殊字符
    2/STRONG      > 检查长度、数字、大小写、特殊字符字典文件

    后记

    经过一段时间后,发现mysql初始密码原来被记录到了日志文件中

    查找日志位置
    [root@test /var/lib/mysql]# ps -ef | grep mysql root 5604 1 0 22:40 pts/1 00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql mysql 5802 5604 5 22:40 pts/1 00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock root 5837 2880 0 22:40 pts/1 00:00:00 grep --color mysql
    藏在日志文件中的临时密码 [root@test /var/lib/mysql]# grep "A temporary password" /var/log/mysqld.log 2016-05-17T16:46:53.059632Z 1 [Note] A temporary password is generated for root@localhost: +wGVA#to(4tu
  • 相关阅读:
    0529学习进度条
    0523-学习进度条
    0515-学习进度条
    实验三-进程模拟调度
    0501-学习进度条
    0424-学习进度条
    0422—操作系统作业调度
    0415-同学博客评价
    0414-复利计算再升级
    0409-学习进度条
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7842275.html
Copyright © 2011-2022 走看看