当前位置:首页 > 文章列表 > 数据库 > MySQL > CentOS下MySQL 8.0安装部署,超详细!

CentOS下MySQL 8.0安装部署,超详细!

来源:51cto 2023-02-24 17:26:40 0浏览 收藏

在数据库实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《CentOS下MySQL 8.0安装部署,超详细!》,聊聊MySQL 8.0、centos、数去库,希望可以帮助到正在努力赚钱的你。

 

MySQL 8正式版8.0.11已发布,官方表示MySQL8要比MySQL 5.7快2倍,还带来了大量的改进和更快的性能!到底谁最牛呢?请看:MySQL 5.7 vs 8.0,哪个性能更牛?

Mysql8.0安装 (YUM方式)

    1.  首先删除系统默认或之前可能安装的其他版本的mysql 

  1. [root@DB-node01 ~]# for i in $(rpm -qa|grep mysql);do rpm -e $i --nodeps;done  
  2. [root@DB-node01 ~]# rm -rf /var/lib/mysql && rm -rf /etc/my.cnf 

    2.   安装Mysql8.0 的yum资源库 

  1. mysql80-community-release-el7-1.noarch.rpm       
  2. [root@DB-node01 ~]# yum localinstall https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm 

    3.  安装Mysql8.0 

  1. [root@DB-node01 ~]# yum install mysql-community-server     
  2. #启动MySQL服务器和MySQL的自动启动  
  3. [root@DB-node01 ~]# systemctl start mysqld  
  4. [root@DB-node01 ~]# systemctl enable mysqld 

    4.  使用默认密码初次登录后, 必须要重置密码 

  1. 查看默认密码, 如下默认密码为"e53xDalx.*dE"  
  2. [root@DB-node01 ~]# grep 'temporary password' /var/log/mysqld.log  
  3. 2019-03-06T01:53:19.897262Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: e53xDalx.*dE  
  4. [root@DB-node01 ~]# mysql -pe53xDalx.*dE  
  5. ............  
  6. mysql> select version();  
  7. ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. 

报错提示必须要重置初始密码, 下面开始重置mysql登录密码(注意要切换到mysql数据库,使用use mysql) 

  1. mysql> use mysql;  
  2. ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.    
  3. mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';  
  4. ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 

这个其实与validate_password_policy的值有关, mysql8.0更改了validate_password_policy相关的配置名称, 这跟Mysql5.7有点不一样了. 

  1. mysql> set global validate_password.policy=0 
  2. Query OK, 0 rows affected (0.00 sec)  
  3. mysql> set global validate_password.length=1 
  4. Query OK, 0 rows affected (0.00 sec) 

接着再修改密码 

  1. mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';  
  2. Query OK, 0 rows affected (0.05 sec)    
  3. mysql> flush privileges;  
  4. Query OK, 0 rows affected (0.03 sec) 

退出, 重新使用新密码登录mysql 

  1. [root@DB-node01 ~]# mysql -p123456  
  2. ...........  
  3. mysql> select version();  
  4. +-----------+  
  5. | version() |  
  6. +-----------+  
  7. | 8.0.15    |  
  8. +-----------+  
  9. 1 row in set (0.00 sec) 

查看服务端口 

  1. mysql> show global variables like 'port';  
  2. +---------------+-------+  
  3. | Variable_name | Value |  
  4. +---------------+-------+  
  5. | port          | 3306  |  
  6. +---------------+-------+  
  7. 1 row in set (0.01 sec) 

查看mysql连接的授权信息 

  1. mysql> select host,user,password from mysql.user;  
  2. ERROR 1054 (42S22): Unknown column 'password' in 'field list' 

上面这是mysql5.6及以下版本的查看命令, mysql5.7之后的数据库里mysql.user表里已经没有password这个字段了,password字段改成了authentication_string。 

  1. mysql> select host,user,authentication_string from mysql.user;  
  2. +-----------+------------------+------------------------------------------------------------------------+  
  3. | host      | user             | authentication_string                                                  |  
  4. +-----------+------------------+------------------------------------------------------------------------+  
  5. | localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |  
  6. | localhost | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |  
  7. | localhost | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |  
  8. | localhost | root             | $A$005${7J0=4Dc7Jym8eI/FU4jimKWFvkD9XmoAkF1ca5.Un0bc6zgmPtU.0          |  
  9. +-----------+------------------+------------------------------------------------------------------------+  
  10. 4 rows in set (0.00 sec) 

mysql8.0修改用户密码命令 

  1. mysql> use mysql;  
  2. mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';  
  3. mysql> flush privileges; 

Mysql8.0安装 (二进制方式)

    1.  首先删除系统默认或之前可能安装的其他版本的mysql 

  1. [root@mysql8-node ~]# for i in $(rpm -qa|grep mysql);do rpm -e $i --nodeps;done  
  2. [root@mysql8-node ~]# rm -rf /var/lib/mysql && rm -rf /etc/my.cnf 

    2.  安装需要的软件包 

  1. [root@mysql8-node ~]# yum -y install libaio  
  2. [root@mysql8-node ~]# yum -y install net-tools 

    3.  下载并安装Mysql8.0.12 

  1. [root@mysql8-node ~]# groupadd mysql  
  2. [root@mysql8-node ~]# useradd -g mysql mysql  
  3. [root@mysql8-node ~]# cd /usr/local/src/  
  4. [root@mysql-node src]# ll  
  5. -rw-r--r-- 1 root root 620389228 Aug 22  2018 mysql8.0.12_bin_centos7.tar.gz  
  6. [root@mysql-node src]# tar -zvxf mysql8.0.12_bin_centos7.tar.gz  
  7. [root@mysql-node src]# mv mysql /usr/local/  
  8. [root@mysql-node src]# chown -R mysql.mysql /usr/local/mysql  
  9. [root@mysql-node src]# vim /home/mysql/.bash_profile  
  10. export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH  
  11. [root@mysql-node src]# source /home/mysql/.bash_profile  
  12. [root@mysql-node src]# echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile  
  13. [root@mysql-node src]# source /etc/profile 

    4.  创建数据目录 

  1. [root@mysql-node src]# mkdir -p /data/mysql/{data,log,binlog,conf,tmp}        
  2. [root@mysql-node src]# chown -R mysql.mysql /data/mysql 

    5.  配置mysql 

  1. [root@mysql-node src]# su - mysql  
  2. [mysql@mysql-node ~]$ vim /data/mysql/conf/my.cnf  
  3. [mysqld]  
  4. lower_case_table_names          = 1  
  5. user                            = mysql  
  6. server_id                       = 1  
  7. port                            = 3306   
  8. default-time-zone = '+08:00'  
  9. enforce_gtid_consistency        = ON  
  10. gtid_mode                       = ON  
  11. binlog_checksum                 = none  
  12. default_authentication_plugin   = mysql_native_password  
  13. datadir                         = /data/mysql/data  
  14. pid-file                        = /data/mysql/tmp/mysqld.pid  
  15. socket                          = /data/mysql/tmp/mysqld.sock  
  16. tmpdir                          = /data/mysql/tmp/  
  17. skip-name-resolve               = ON  
  18. open_files_limit                = 65535  
  19. table_open_cache                = 2000  
  20. #################innodb########################  
  21. innodb_data_home_dir            = /data/mysql/data  
  22. innodb_data_file_path           = ibdata1:512M;ibdata2:512M:autoextend  
  23. innodb_buffer_pool_size = 12000M  
  24. innodb_flush_log_at_trx_commit = 1  
  25. innodb_io_capacity = 600  
  26. innodb_lock_wait_timeout = 120 
  27. innodb_log_buffer_size = 8M  
  28. innodb_log_file_size = 200M  
  29. innodb_log_files_in_group = 3 
  30. innodb_max_dirty_pages_pct = 85  
  31. innodb_read_io_threads = 8 
  32. innodb_write_io_threads = 8  
  33. innodb_thread_concurrency = 32  
  34. innodb_file_per_table  
  35. innodb_rollback_on_timeout   
  36. innodb_undo_directory           = /data/mysql/data  
  37. innodb_log_group_home_dir       = /data/mysql/data  
  38. ###################session###########################  
  39. join_buffer_size = 8M  
  40. key_buffer_size = 256M  
  41. bulk_insert_buffer_size = 8M  
  42. max_heap_table_size = 96M  
  43. tmp_table_size = 96M  
  44. read_buffer_size = 8M  
  45. sort_buffer_size = 2M  
  46. max_allowed_packet = 64M  
  47. read_rnd_buffer_size = 32M  
  48. ############log set###################  
  49. log-error                       = /data/mysql/log/mysqld.err  
  50. log-bin                         = /data/mysql/binlog/binlog  
  51. log_bin_index                   = /data/mysql/binlog/binlog.index  
  52. max_binlog_size                 = 500M  
  53. slow_query_log_file             = /data/mysql/log/slow.log  
  54. slow_query_log                  = 1  
  55. long_query_time                 = 10  
  56. log_queries_not_using_indexes   = ON  
  57. log_throttle_queries_not_using_indexes  = 10  
  58. log_slow_admin_statements       = ON  
  59. log_output                      = FILE,TABLE  
  60. master_info_file                = /data/mysql/binlog/master.info 

    6.  初始化 (稍等一会儿, 可以到/data/mysql/log/mysqld.err日子里查看初始化过程, 看看有没有error信息) 

  1. [mysql@mysql-node ~]$ mysqld --defaults-file=/data/mysql/conf/my.cnf  --initialize-insecure  --user=mysql  

    7.  启动mysqld 

  1. [mysql@mysql-node ~]$ mysqld_safe --defaults-file=/data/mysql/conf/my.cnf &   
  2. [mysql@mysql-node ~]$ lsof -i:3306  
  3. COMMAND   PID  USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME  
  4. mysqld  24743 mysql   23u  IPv6 23132988      0t0  TCP *:mysql (LISTEN) 

    8.  登录mysql, 重置密码 

  1. 本地首次使用sock文件登录mysql是不需要密码的  
  2. [mysql@mysql-node ~]# mysql -S /data/mysql/tmp/mysqld.sock  
  3. .............  
  4. mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';  
  5. Query OK, 0 rows affected (0.07 sec)  
  6. mysql> flush privileges;  
  7. Query OK, 0 rows affected (0.03 sec) 
  8. mysql> select host,user,authentication_string from mysql.user;  
  9. +-----------+------------------+------------------------------------------------------------------------+  
  10. | host      | user             | authentication_string                                                  |  
  11. +-----------+------------------+------------------------------------------------------------------------+ 
  12. | localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |  
  13. | localhost | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |  
  14. | localhost | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |  
  15. | localhost | root             | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9                              |  
  16. +-----------+------------------+------------------------------------------------------------------------+  
  17. 4 rows in set (0.00 sec) 

退出, 此时密码重置后, 就不能使用sock文件无密码登录了 

  1. [root@mysql-node ~]# mysql -S /data/mysql/tmp/mysqld.sock  
  2. ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)  
  3. [root@mysql-node ~]# mysql -p123456  
  4. mysql: [Warning] Using a password on the command line interface can be insecure.  
  5. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 

做sock文件的软链接 

  1. [root@mysql-node ~]# ln -s /data/mysql/tmp/mysqld.sock /tmp/mysql.sock 

登录 

  1. [root@mysql-node ~]# mysql -p123456  
  2. 或者  
  3. [root@mysql-node ~]# mysql -uroot -S /data/mysql/tmp/mysqld.sock -p123456  
  4. .............  
  5. mysql> select version(); 
  6. +-----------+  
  7. | version() |  
  8. +-----------+  
  9. | 8.0.12    |  
  10. +-----------+  
  11. 1 row in set (0.00 sec)  
  12. #授予用户权限. 必须先要创建用户, 才能授权!!  
  13. (创建用户时要带@并指定地址, 则grant授权时的地址就是这个@后面指定的!, 否则grant授权就会报错!)  
  14. mysql> create user 'kevin'@'%' identified by '123456';  
  15. Query OK, 0 rows affected (0.11 sec)  
  16. mysql> grant all privileges on *.* to 'kevin'@'%' with grant option;   
  17. Query OK, 0 rows affected (0.21 sec) 
  18. mysql> select host,user,authentication_string from mysql.user;  
  19. +-----------+------------------+------------------------------------------------------------------------+  
  20. | host      | user             | authentication_string                                                  |  
  21. +-----------+------------------+------------------------------------------------------------------------+  
  22. | %         | kevin            | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9                              |  
  23. | localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |  
  24. | localhost | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |  
  25. | localhost | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |  
  26. | localhost | root             | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9                              |  
  27. +-----------+------------------+------------------------------------------------------------------------+  
  28. 5 rows in set (0.00 sec) 
  29. mysql> update mysql.user set host='172.16.60.%' where user="kevin" 
  30. Query OK, 1 row affected (0.16 sec)  
  31. Rows matched: 1  Changed: 1  Warnings: 0  
  32. mysql> flush privileges;  
  33. Query OK, 0 rows affected (0.05 sec)  
  34. mysql> select host,user,authentication_string from mysql.user;  
  35. +-------------+------------------+------------------------------------------------------------------------+  
  36. | host        | user             | authentication_string                                                  |  
  37. +-------------+------------------+------------------------------------------------------------------------+  
  38. | 172.16.60.% | kevin            | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9                              |  
  39. | localhost   | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | 
  40. | localhost   | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |  
  41. | localhost   | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |  
  42. | localhost   | root             | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9                              |  
  43. +-------------+------------------+------------------------------------------------------------------------+  
  44. 5 rows in set (0.00 sec)  
  45. mysql>  create user 'bobo'@'172.16.60.%' identified by '123456';    
  46. Query OK, 0 rows affected (0.09 sec)  
  47. mysql> grant all privileges on *.* to 'bobo'@'172.16.60.%';    
  48. Query OK, 0 rows affected (0.17 sec) 
  49. mysql> flush privileges;  
  50. Query OK, 0 rows affected (0.04 sec)  
  51. mysql> select host,user,authentication_string from mysql.user;  
  52. +-------------+------------------+------------------------------------------------------------------------+  
  53. | host        | user             | authentication_string                                                  |  
  54. +-------------+------------------+------------------------------------------------------------------------+  
  55. | 172.16.60.% | bobo             | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9                              |  
  56. | 172.16.60.% | kevin            | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9                              |  
  57. | localhost   | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |  
  58. | localhost   | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |  
  59. | localhost   | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |  
  60. | localhost   | root             | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9                              |  
  61. +-------------+------------------+------------------------------------------------------------------------+  
  62. 6 rows in set (0.00 sec)  
  63. mysql> show grants for kevin@'172.16.60.%';  
  64. +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
  65. | Grants for kevin@172.16.60.%                                                                                                                                                                                                                                                                                                                                                                             | 
  66. +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
  67. | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, CREATE ROLE, DROP ROLE ON *.* TO `kevin`@`172.16.60.%` WITH GRANT OPTION | 
  68. +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
  69. 1 row in set (0.00 sec) 

MySQL单机多实例安装配置

通过上面二进制部署可知, 已经起来一个3306端口的MySQL实例, 现在需要再起来两个实例, 分别为3307, 3308. 操作如下:

创建实例的数据目录 

  1. [root@mysql-node ~]# mkdir -p /data/mysql3307/{data,log,binlog,conf,tmp}     
  2. [root@mysql-node ~]# mkdir -p /data/mysql3308/{data,log,binlog,conf,tmp}      
  3. [root@mysql-node ~]# chown -R mysql.mysql /data/mysql3307  
  4. [root@mysql-node ~]# chown -R mysql.mysql /data/mysql3308 

配置mysql 

  1. [root@mysql-node ~]# cp -r /data/mysql/conf/my.cnf /data/mysql3307/conf/  
  2. [root@mysql-node ~]# cp -r /data/mysql/conf/my.cnf /data/mysql3308/conf/  
  3. [root@mysql-node ~]# sed -i 's#/data/mysql/#/data/mysql3307/#g' /data/mysql3307/conf/my.cnf  
  4. [root@mysql-node ~]# sed -i 's#/data/mysql/#/data/mysql3308/#g' /data/mysql3308/conf/my.cnf  
  5. [root@mysql-node ~]# sed -i 's/3306/3307/g' /data/mysql3307/conf/my.cnf  
  6. [root@mysql-node ~]# sed -i 's/3306/3308/g' /data/mysql3308/conf/my.cnf   
  7. [root@mysql-node ~]# chown -R mysql.mysql /data/mysql* 

进行初始化两个实例 

  1. [root@mysql-node ~]# mysqld --defaults-file=/data/mysql3307/conf/my.cnf  --initialize-insecure  --user=mysql   
  2. [root@mysql-node ~]# mysqld --defaults-file=/data/mysql3308/conf/my.cnf  --initialize-insecure  --user=mysql 

接着启动mysqld 

  1. [root@mysql-node ~]# mysqld_safe --defaults-file=/data/mysql3307/conf/my.cnf &  
  2. [root@mysql-node ~]# mysqld_safe --defaults-file=/data/mysql3308/conf/my.cnf & 

查看启动是否成功 

  1. [root@mysql-node ~]# ps -ef|grep mysql  
  2. mysql    23996     1  0 14:37 ?        00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/conf/my.cnf  
  3. mysql    24743 23996  0 14:38 ?        00:00:17 /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/conf/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --log-error=/data/mysql/log/mysqld.err --open-files-limit=65535 --pid-file=/data/mysql/tmp/mysqld.pid --socket=/data/mysql/tmp/mysqld.sock --port=3306 
  4. root     30473 23727  0 15:33 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql3307/conf/my.cnf 
  5. mysql    31191 30473 17 15:33 pts/0    00:00:02 /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql3307/conf/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql3307/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql3307/log/mysqld.err --open-files-limit=65535 --pid-file=/data/mysql3307/tmp/mysqld.pid --socket=/data/mysql3307/tmp/mysqld.sock --port=3307 
  6. root     31254 23727  0 15:33 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql3308/conf/my.cnf 
  7. mysql    31977 31254 39 15:33 pts/0    00:00:02 /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql3308/conf/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql3308/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql3308/log/mysqld.err --open-files-limit=65535 --pid-file=/data/mysql3308/tmp/mysqld.pid --socket=/data/mysql3308/tmp/mysqld.sock --port=3308 
  8. root     32044 23727  0 15:34 pts/0    00:00:00 grep --color=auto mysql  
  9. [root@mysql-node ~]# lsof -i:3307  
  10. COMMAND   PID  USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME  
  11. mysqld  31191 mysql   22u  IPv6 23144844      0t0  TCP *:opsession-prxy (LISTEN)  
  12. [root@mysql-node ~]# lsof -i:3308  
  13. COMMAND   PID  USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME  
  14. mysqld  31977 mysql   22u  IPv6 23145727      0t0  TCP *:tns-server (LISTEN)  
  15. [root@mysql-node ~]# lsof -i:3306  
  16. COMMAND   PID  USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME  
  17. mysqld  24743 mysql   23u  IPv6 23132988      0t0  TCP *:mysql (LISTEN) 

登录3307端口实例, 并设置密码 

  1. [root@mysql-node ~]# mysql -S /data/mysql3307/tmp/mysqld.sock  
  2. ............ 
  3. mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';  
  4. Query OK, 0 rows affected (0.11 sec) 
  5. mysql> flush privileges;  
  6. Query OK, 0 rows affected (0.11 sec) 

退出, 使用新密码登录 

  1. [root@mysql-node ~]# mysql -uroot -S /data/mysql3307/tmp/mysqld.sock -p123456     
  2. .............  
  3. mysql> 

同理, 登录3308端口实例, 并设置密码 

  1. [root@mysql-node ~]# mysql -S /data/mysql3308/tmp/mysqld.sock  
  2. ...........  
  3. mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';  
  4. Query OK, 0 rows affected (0.13 sec)  
  5. mysql> flush privileges;  
  6. Query OK, 0 rows affected (0.03 sec) 

退出, 使用新密码登录 

  1. [root@mysql-node ~]# mysql -uroot -S /data/mysql3308/tmp/mysqld.sock -p123456  
  2. ....................  
  3. mysql> 

3306, 3307, 3308三个端口实例的启动命令分别为: 

  1. mysqld_safe --defaults-file=/data/mysql/conf/my.cnf &  
  2. mysqld_safe --defaults-file=/data/mysql3307/conf/my.cnf &  
  3. mysqld_safe --defaults-file=/data/mysql3308/conf/my.cnf & 

登录命令分别为: 

  1. mysql -uroot -S /data/mysql/tmp/mysqld.sock -p123456  
  2. mysql -uroot -S /data/mysql3307/tmp/mysqld.sock -p123456  
  3. mysql -uroot -S /data/mysql3308/tmp/mysqld.sock -p123456 

不过为了解决大家平时重复安装的问题,特意将多实例安装方法编辑成脚本了,有需要的读者可以在本公众号后台直接回复 MySQL8 获取多实例安装脚本。

Mysql8.0使用过程中踩过的一些坑

  •  1)创建用户和授权 在mysql8.0创建用户和授权和之前不太一样了,其实严格上来讲,也不能说是不一样, 只能说是更严格, mysql8.0需要先创建用户(创建用户时要带@并指定地址, 则grant授权时的地址就是这个@后面指定的!, 否则grant授权就会报错!)和设置密码,然后才能授权。 

  1. mysql> create user 'kevin'@'%' identified by '123456';  
  2. Query OK, 0 rows affected (0.04 sec)  
  3. mysql> grant all privileges on *.* to 'kevin'@'%' with grant option;     
  4. Query OK, 0 rows affected (0.04 sec)  
  5. mysql> create user 'bobo'@'%' identified by '123456';    
  6. Query OK, 0 rows affected (0.06 sec)  
  7. mysql> grant all privileges on *.* to 'bobo'@'%' with grant option; 
  8. Query OK, 0 rows affected (0.03 sec)  
  9. mysql> flush privileges;  
  10. Query OK, 0 rows affected (0.04 sec)  
  11. mysql> select host,user,authentication_string from mysql.user;  
  12. +-----------+------------------+------------------------------------------------------------------------+  
  13. | host      | user             | authentication_string                                                  |  
  14. +-----------+------------------+------------------------------------------------------------------------+  
  15. | %         | bobo             | $A$005$1VY")q?G6^X@-6LsXrPt5C0TwlTuvHbaOa3sYF0DKViIGoRPuCF8AzwiFcim1  |  
  16. | %         | kevin            | $A$005$hy`U}ZB#R::rA8W0y2rmwgySqzv0rmR1eTeNDSaXfQPWIsrh7ytbVdi85       |  
  17. | localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |  
  18. | localhost | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |  
  19. | localhost | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |  
  20. | localhost | root             | $A$005$/VO_y^7,]6;2qxggBLmJzhA0Qylu5/AHuRScZ/ykKedgZKh/6krOIzPs2       |  
  21. +-----------+------------------+------------------------------------------------------------------------+ 

如果还是用Mysql5.7及之前版本的直接授权的方法, 会有报错: 

  1. mysql> grant all privileges on *.* to 'shibo'@'%' identified by '123456';  
  2. ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by '123456'' at line 1 
  •   2)Mysql8.0默认是不能使用root账号进行远程登录的! root账号只能本地登录! 

  1. mysql> select host,user,authentication_string from mysql.user;  
  2. +-----------+------------------+------------------------------------------------------------------------+  
  3. | host      | user             | authentication_string                                                  |  
  4. +-----------+------------------+------------------------------------------------------------------------+  
  5. | %         | bobo             | $A$005$1VY")q?G6^X@-6LsXrPt5C0TwlTuvHbaOa3sYF0DKViIGoRPuCF8AzwiFcim1 |  
  6. | %         | kevin            | $A$005$hy`U}ZB#R::rA8W0y2rmwgySqzv0rmR1eTeNDSaXfQPWIsrh7ytbVdi85 |  
  7. | localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |  
  8. | localhost | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |  
  9. | localhost | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |  
  10. | localhost | root             | $A$005$/VO_y^7,]6;2qxggBLmJzhA0Qylu5/AHuRScZ/ykKedgZKh/6krOIzPs2 |  
  11. +-----------+------------------+------------------------------------------------------------------------+  
  12. 6 rows in set (0.00 sec) 

如果想要远程登录, 则需要进行update更新下root账号的权限 

  1. mysql> update mysql.user set host='%' where user="root" 
  2. Query OK, 1 row affected (0.10 sec)  
  3. Rows matched: 1  Changed: 1  Warnings: 0  
  4. mysql> flush privileges;  
  5. Query OK, 0 rows affected (0.14 sec)  
  6. mysql> select host,user,authentication_string from mysql.user; 
  7. +-----------+------------------+------------------------------------------------------------------------+  
  8. | host      | user             | authentication_string                                                  |  
  9. +-----------+------------------+------------------------------------------------------------------------+  
  10. | %         | bobo             | $A$005$1VY")q?G6^X@-6LsXrPt5C0TwlTuvHbaOa3sYF0DKViIGoRPuCF8AzwiFcim1  |  
  11. | %         | kevin            | $A$005$hy`U}ZB#R::rA8W0y2rmwgySqzv0rmR1eTeNDSaXfQPWIsrh7ytbVdi85       |  
  12. | %         | root             | $A$005$/VO_y^7,]6;2qxggBLmJzhA0Qylu5/AHuRScZ/ykKedgZKh/6krOIzPs2       |  
  13. | localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |  
  14. | localhost | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |  
  15. | localhost | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |  
  16. +-----------+------------------+------------------------------------------------------------------------+  
  17. 6 rows in set (0.00 sec) 

这样就能在远程使用root账号登录该mysql8.0的数据库了

  •   3. 修改root账号权限, 允许root账号远程登录后, 用navicat进行mysql的远程连接时,出现了弹窗报错:出现这个原因是mysql8 之前的版本中加密规则是mysql_native_password, 而在mysql8之后,加密规则是caching_sha2_password, 解决问题方法有两种:

  •  1.   一种是升级navicat驱动;
  •   2.  一种是把mysql用户登录密码加密规则还原成mysql_native_password; 这里选择第二种方法来解决: 

  1. #修改加密规则  
  2. mysql> ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;     
  3. Query OK, 0 rows affected (0.16 sec)  
  4. #更新一下用户的密码  
  5. mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';  
  6. Query OK, 0 rows affected (0.08 sec)  
  7. #刷新权限  
  8. mysql> FLUSH PRIVILEGES;  
  9. Query OK, 0 rows affected (0.03 sec) 

这样问题就解决了。

  •   1、使用sqlyog链接时会出现2058的异常,此时我们需要修改mysql,命令行登录mysql(与修改密码中登录相同,使用修改后的密码),然后执行下面的命令:mysql > ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; 其中password为自己修改的密码。然后SQLyog中重新连接,则可连接成功,OK。
  •   2、如果报错:ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'则使用下面命令:mysql > ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
  •   4.  sqlyog链接时出现2058异常
  •   5.  修改默认编码方式 mysql8.0默认编码方式为utf8mb4,因此使用时不需要修改,可使用如下命令查看:

  1. mysql > SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%'; 

如果需要修改其他编码方式,比如需要修改为utf8mb4,可以使用如下方式: 

  1. 修改mysql配置文件my.cnf, 找到后请在以下三部分里添加如下内容:  
  2. [client] 
  3. default-character-set = utf8mb4  
  4. [mysql]  
  5. default-character-set = utf8mb4  
  6. [mysqld]  
  7. character-set-client-handshake = FALSE  
  8. character-set-server = utf8mb4  
  9. collation-server = utf8mb4_unicode_ci  
  10. init_connect='SET NAMES utf8mb4' 

然后重启mysqld服务即可, 其中: 

  1. character_set_client  (客户端来源数据使用的字符集)  
  2. character_set_connection     (连接层字符集)  
  3. character_set_database   (当前选中数据库的默认字符集)  
  4. character_set_results (查询结果字符集)  
  5. character_set_server (默认的内部操作字符集) 

数据库连接参数中: 

  1. characterEncoding=utf8 会被自动识别为utf8mb4,也可以不加这个参数,会自动检测。  
  2. autoReconnect=true 是必须加上的。 
  •  6)部分参数配置查询命令 

  1. #查询mysql最大连接数设置 
  2. mysql> show global variables like 'max_conn%';  
  3. mysql> SELECT @@MAX_CONNECTIONS AS 'Max Connections';  
  4. # 查看最大链接数  
  5. mysql> show global status like 'Max_used_connections';  
  6. # 查看慢查询日志是否开启以及日志位置  
  7. mysql> show variables like 'slow_query%';  
  8. # 查看慢查询日志超时记录时间  
  9. mysql> show variables like 'long_query_time';  
  10. # 查看链接创建以及现在正在链接数  
  11. mysql> show status like 'Threads%'; 
  12. # 查看数据库当前链接  
  13. mysql> show processlist; 
  14. # 查看数据库配置  
  15. mysql> show variables like '%quer%';   

 

理论要掌握,实操不能落!以上关于《CentOS下MySQL 8.0安装部署,超详细!》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

版本声明
本文转载于:51cto 如有侵犯,请联系study_golang@163.com删除
入职第一天,MySQL就崩了...入职第一天,MySQL就崩了...
上一篇
入职第一天,MySQL就崩了...
MySQL EXPLAIN结果集分析 - 附带大量案例
下一篇
MySQL EXPLAIN结果集分析 - 附带大量案例
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    508次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    497次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • 茅茅虫AIGC检测:精准识别AI生成内容,保障学术诚信
    茅茅虫AIGC检测
    茅茅虫AIGC检测,湖南茅茅虫科技有限公司倾力打造,运用NLP技术精准识别AI生成文本,提供论文、专著等学术文本的AIGC检测服务。支持多种格式,生成可视化报告,保障您的学术诚信和内容质量。
    21次使用
  • 赛林匹克平台:科技赛事聚合,赋能AI、算力、量子计算创新
    赛林匹克平台(Challympics)
    探索赛林匹克平台Challympics,一个聚焦人工智能、算力算法、量子计算等前沿技术的赛事聚合平台。连接产学研用,助力科技创新与产业升级。
    50次使用
  • SEO  笔格AIPPT:AI智能PPT制作,免费生成,高效演示
    笔格AIPPT
    SEO 笔格AIPPT是135编辑器推出的AI智能PPT制作平台,依托DeepSeek大模型,实现智能大纲生成、一键PPT生成、AI文字优化、图像生成等功能。免费试用,提升PPT制作效率,适用于商务演示、教育培训等多种场景。
    58次使用
  • 稿定PPT:在线AI演示设计,高效PPT制作工具
    稿定PPT
    告别PPT制作难题!稿定PPT提供海量模板、AI智能生成、在线协作,助您轻松制作专业演示文稿。职场办公、教育学习、企业服务全覆盖,降本增效,释放创意!
    53次使用
  • Suno苏诺中文版:AI音乐创作平台,人人都是音乐家
    Suno苏诺中文版
    探索Suno苏诺中文版,一款颠覆传统音乐创作的AI平台。无需专业技能,轻松创作个性化音乐。智能词曲生成、风格迁移、海量音效,释放您的音乐灵感!
    60次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码