CentOS 6.7 安装 MySQL5.7.17

1. 解压到 /usr/local

# tar zxvf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz -C /usr/local/


2. 重命名

# cd /usr/local/

mv mysql-5.7.17-linux-glibc2.5-x86_64/ mysql

3. 创建用户

        建立用户mysql,组mysql。后面mysql就使用这个用户来运行(注意这也是mysql启动脚本中默认的用户,因此最好不要改名)。
        #groupadd mysql
        #useradd -r -g mysql mysql
        (使用-r参数表示mysql用户是一个系统用户,不能登录)
 
        建立目录/data/mysql/data,后面mysql就安装在这个目录下面。
        #mkdir /data/mysql/data


4. 初始化操作(生成初始密码):

        先要创建 /data/mysql/data 目录


        [root@localhost mysql]# ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data
        2016-07-22T09:58:15.001776Z 0 [Warning] InnoDB: New log files created, LSN=45790
        2016-07-22T09:58:15.062066Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
        2016-07-22T09:58:15.073009Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID:           ebfb8a6-4ff2-11e6-8c8d-005056a01a07.
        2016-07-22T09:58:15.074370Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
        2016-07-22T09:58:15.075736Z 1 [Note] A temporary password is generated for root@localhost: k_1ljzVh3<-,
        [root@localhost mysql]#
        注意最后一行,这也是和之有版本不同的地方,它给了root一个初始密码,后面要登录的时候要用到这个密码。

        PS: mysql5.7新特性:由上面可以看出, mysql_install_db 已经不再推荐使用了,建议改成 mysqld --initialize 完成实例初始化。

        注意:
                1. data目录解压后没有,需要手动建立(见上文);
                2. mysql5.7和之前版本不同,很多资料上都是这个命令
                ...../scripts/mysql_install_db --user=mysql
                 而5.7版本根本没有这个。


5. 创建配置文件  my.cnf

       1. 将默认生成的my.cnf备份
               # mv /etc/my.cnf /etc/my.cnf.bak
               [root@localhost support-files]# cp my-default.cnf  /etc/my.cnf


        2. 配置
              将mysql/support-files下的my-default.cnf改名为my.cnf,拷到/etc下(或者考到{mysql}下,然后作一个软链接到/etc下):
              #cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
              my.cnf中关键配置:
                            [mysqld]
                            basedir = /usr/local/mysql
                            datadir = /data/mysql/data
                            port = 3306
                            socket = /data/mysql/data/tmp/mysql.sock
 
                            sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

 
              注意,tmp目录不存在,请创建之。
 
              如果不把my.cnf拷到/etc下,运行时会出现:
                            mysqld: Can't change dir to '/usr/local/mysql/data/' (Errcode: 2 - No such file or directory)
                            这样的出错提示,说明它没找到my.cnf中的配置;而去找了程序编译时的默认安装位置:/usr/local/mysql


6.  加入MySQL为系统服务:
       [root@localhost mysql]# cp support-files/mysql.server  /etc/init.d/mysqld
       [root@localhost mysql]# chkconfig mysqld on
       [root@localhost mysql]# chkconfig --list|grep mysqld
                                                mysqld          0:off  1:off  2:on    3:on    4:on    5:on    6:off
       [root@localhost mysql]#chmod 755 /etc/init.d/mysqld
 
7. MySQL服务启动、重启、停止
       [root@localhost mysql]# service mysqld start
       [root@localhost mysql]# service mysqld stop
       [root@localhost mysql]# service mysqld restart
       [root@localhost mysql]# 


8. 设置环境变量:
       [root@localhost mysql]# vim /etc/profile
       export PATH=/usr/local/mysql/bin:$PATH
       [root@localhost mysql]# source /etc/profile

9. 检查MySQL是否能开启  

       [root@localhost mysql]# cd /usr/local/mysql
       [root@localhost mysql]# cd support-files/
       [root@localhost support-files]# ./mysql.server start
       Starting MySQL.. SUCCESS! 
       

       问题1: 若改用了, 则在启动服务时会出现如下错误:
                     # ./support-files/mysql.server start
                     ./support-files/mysql.server: line 276: cd: /usr/local/mysql: No such file or directory
                     Starting MySQL ERROR! Couldn't find MySQL server (/usr/local/mysql/bin/mysqld_safe)
                     这时候我们需要修改/support-files/mysql.server文件的basedir和datadir目录路径为我们正确的mysql的basedir和datadir路径, 如下:
                     # vim support-files/mysql.server   注意:修改后,再复制到#cp support-files/mysql.server  /etc/init.d/mysqld
                     --------------------------
                     ...
                     basedir=/usr/local/mysql
                     datadir=/data/mysql/data
                     ... 
                     --------------------------
                     # ./support-files/mysql.server start
                     Starting MySQL.. SUCCESS! 

        问题2: [root@imango mysql]# service mysqld start
                     Starting MySQL...The server quit without updating PID file (/data/mysql/data/imango.localdomain.pid).[FAILED]

                     如果出现上面的错误,表示data目录没有权限: 

                     [root@imango mysql]# chown -R mysql:mysql /data
                     [root@imango mysql]# chown -R mysql:mysql /data/mysql/
                     [root@imango mysql]# chown -R mysql:mysql /data/mysql/data/
                     [root@imango mysql]# chown -R mysql:mysql /data/mysql/data/tmp/

                     [root@imango mysql]# service mysqld start
                     Starting MySQL.[  OK  ]


10. 设置mysql以服务运行并且开机启动
 
        将{mysql}/ support-files/mysql.server 拷贝为/etc/init.d/mysqld并设置运行权限
 
        #cp mysql.server /etc/init.d/mysqld
        #chmod +x /etc/init.d/mysqld
 
        把mysql注册为开机启动的服务
        #chkconfig --add mysqld
 
        当然也可以手动进行服务的开启和关闭:
        #/etc/init.d/mysqld start
        #/etc/init.d/mysqld stop

11.  客户端连接测试
 
        #{mysql}/bin/mysql -uroot -p
        此时要求输入密码,就是前面初始化时生成的密码。
        这时如果连接服务的时候出现错误:
        ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
        则需要在在my.cnf中填加:(与[mysqld]节点中的socket一样就可以)

        [client]
        socket=/data/mysql/data/tmp/mysql.sock
 
        连上后,在做任何操作前,mysql要求要改掉root的密码后才能进行操作。
        ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
        mysql> alter user 'root'@'localhost' identified by 'xxxxxxx';

        或

        mysql> SET PASSWORD = PASSWORD('xxxxxx');  


另外打开一个终端(p.s. 如果是ssh连接登录的, 另外创建一个ssh连接即可), 执行操作如下:


# mysql -u root mysql

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A


Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 2

Server version: 5.7.13 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql> use mysql;

Database changed

mysql> UPDATE user SET password=PASSWORD('123456') WHERE user='root';

ERROR 1054 (42S22): Unknown column 'password' in 'field list'

mysql> update user set authentication_string = PASSWORD('123456') where user = 'root';

Query OK, 1 row affected, 1 warning (0.02 sec)

Rows matched: 1  Changed: 1  Warnings: 1


mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)


mysql> \s

mysql  Ver 14.14 Distrib 5.7.13, for linux-glibc2.5 (x86_64) using  EditLine wrapper


Connection id:          62

Current database:

Current user:          root@localhost

SSL:                    Not in use

Current pager:          stdout

Using outfile:          ''

Using delimiter:        ;

Server version:        5.7.13-log MySQL Community Server (GPL)

Protocol version:      10

Connection:            Localhost via UNIX socket

Server characterset:    utf8

Db    characterset:    utf8

Client characterset:    utf8

Conn.  characterset:    utf8

UNIX socket:            /data/AEData/mysql/data/mysql.sock

Uptime:                46 min 54 sec



Threads: 6  Questions: 6846  Slow queries: 0  Opens: 257  Flush tables: 1  Open tables: 201  Queries per second avg: 2.432

--------------


mysql> 

到此, 设置完mysql用户root的密码且确保mysql编码集是utf8, 注意上面, 新版本的mysql.user表里的密码字段是authentication_string



MySQL远程授权

格式如下:

mysql> grant all [privileges] on db_name.table_name to 'username'@'host' identified by 'password';

示例如下:


mysql> grant all privileges on *.* to 'root'@'%' identified by '123456';

Query OK, 0 rows affected, 1 warning (0.04 sec)


mysql> FLUSH PRIVILEGES;

Query OK, 0 rows affected (0.00 sec)

mysql> 

或用

mysql> grant all on *.* to 'root'@'%' identified by '123456';



到此, 完成了mysql的安装 及配置!!!


12、TIPS 

        【查看mysql是否运行】
        ps -ef|grep mysqld
        netstat -lnp | grep -i mysql

       【mysql启动时读取配置文件my.cnf的顺序】
       可以运行如下命令查看:
       ./bin/mysqld --verbose --help |more
       Default options are read from the following files in the given order:
       /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
       可以看到,启动时可以从上述目录下读取配置文件my.cnf。如果当前my.cnf文件不位于上述位置,则必须考过去或做链接。



MySQL 5.7新特性之Generated Column(函数索引) http://www.linuxidc.com/Linux/2016-02/128066.htm

升级到MySQL 5.7 解决分区问题  http://www.linuxidc.com/Linux/2016-02/128060.htm

MySQL 5.7 完美的分布式事务支持 http://www.linuxidc.com/Linux/2016-02/128053.htm

MySQL 5.7 新特性详解 http://www.linuxidc.com/Linux/2016-01/127636.htm

MySQL 5.7.11 发布下载 http://www.linuxidc.com/Linux/2016-02/128268.htm

在 CentOS 7 中以命令行方式安装 MySQL 5.7.11 for Linux Generic 二进制版本  http://www.linuxidc.com/Linux/2016-03/129187.htm

更多CentOS相关信息见CentOS 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=14





附上配置文件:
[client] 
loose_default-character-set = utf8 
[mysqld] 
basedir = /usr/local/mysql 
datadir = /data/mysql/data 
port = 3306 
server_id = 1 
socket = /data/mysql/data/mysql.sock 
expire_logs_days      = 7 
innodb_file_per_table 
innodb_buffer_pool_size        = 2G 
innodb_thread_concurrency      = 24 
innodb_flush_log_at_trx_commit  = 1 
innodb_log_buffer_size          = 32M 
innodb_log_file_size            = 256M 
innodb_log_files_in_group      = 3 
innodb_max_dirty_pages_pct      = 90 
innodb_lock_wait_timeout        = 120 
wait_timeout            = 60  
interactive_timeout    = 7200 
skip-name-resolve 
character-set-server    = utf8 
back_log                = 50 
max_connections        = 3000 
max_connect_errors      = 32 
max_allowed_packet      = 32M 
binlog_cache_size      = 8M 
max_heap_table_size    = 512M 
tmp_table_size          = 64M 
key_buffer_size        = 16M 
read_buffer_size        = 2M 
read_rnd_buffer_size    = 8M 
bulk_insert_buffer_size = 64M 
sort_buffer_size        = 4M 
join_buffer_size        = 2M 
thread_cache_size      = 64 
thread_stack            = 192K 
query_cache_type        = 1 
query_cache_size        = 256M 
query_cache_limit      = 2M 
ft_min_word_len        = 2 
default_storage_engine  = INNODB 
#default_table_type    = INNODB 
transaction_isolation  = REPEATABLE-READ 
lower_case_table_names  = 1 
#log_slow_queries 
slow_query_log 
long_query_time = 2 
log-short-format 
myisam_sort_buffer_size        = 128M 
myisam_max_sort_file_size      = 10G 
myisam_repair_threads          = 1 
[mysqldump] 
quick 
max_allowed_packet = 32M 
routines 
single-transaction 
hex-blob 
skip-comments  
complete-insert  
skip-disable-keys  
skip-add-locks  
skip-lock-tables  
[isamchk]  
key_buffer      = 512M 
sort_buffer_size = 512M 
read_buffer      = 8M 
write_buffer    = 8M 
[myisamchk] 
key_buffer      = 512M 
sort_buffer_size = 512M 
read_buffer      = 8M 
write_buffer    = 8M 
[mysqlhotcopy] 
interactive-timeout 
# Remove leading # to set options mainly useful for reporting servers. 
# The server defaults are faster for transactions and fast SELECTs. 
# Adjust sizes as needed, experiment to find the optimal values. 
# join_buffer_size = 128M 
# sort_buffer_size = 2M 
# read_rnd_buffer_size = 2M  
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

你可能感兴趣的:(MySQL)