請到這個地址看:https://www.cnblogs.com/kevingrace/p/10482469.html Centos7安裝MySQL8.0 - 操作手冊
一、yum安裝方式:
- 卸載之前版本的mysql:
[root@DB-node01 ~]# for i in $(rpm -qa|grep mysql);do rpm -e $i --nodeps;done [root@DB-node01 ~]# rm -rf /var/lib/mysql && rm -rf /etc/my.cnf
下載地址: https:
//pan
.baidu.com
/s/1QzYaSnzAQeTqAmk8FE9doA
提取密碼: 2maw
- 安裝、啟動、第一次登錄
[root@DB-node01 ~]# yum localinstall https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm #安裝yum源文件 [root@DB-node01 ~]# yum install mysql-community-server [root@DB-node01 ~]# systemctl start mysqld [root@DB-node01 ~]# systemctl enable mysqld [root@DB-node01 ~]# grep 'temporary password' /var/log/mysqld.log 2019-03-06T01:53:19.897262Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: e53xDalx.*dE [root@DB-node01 ~]# mysql -p'e53xDalx.*dE'
- 修改密碼、密碼復雜性要求
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; ERROR 1819 (HY000): Your password does not satisfy the current policy requirements mysql> set global validate_password.policy=0; --Mysql5.7有點不一樣了. Query OK, 0 rows affected (0.00 sec) mysql> set global validate_password.length=1; Query OK, 0 rows affected (0.00 sec) mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; --接着再修改密碼 Query OK, 0 rows affected (0.05 sec) mysql> flush privileges; Query OK, 0 rows affected (0.03 sec)
- 查看基本信息:
mysql> select version(); --查看版本 mysql> show global variables like 'port'; --查看服務端口 mysql> select host,user,authentication_string from mysql.user; --查看mysql連接的授權信息 +-----------+------------------+------------------------------------------------------------------------+ | host | user | authentication_string | +-----------+------------------+------------------------------------------------------------------------+ | localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | localhost | mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | localhost | mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | localhost | root | $A$005${7J0=4Dc7Jym8eI/FU4jimKWFvkD9XmoAkF1ca5.Un0bc6zgmPtU.0 | +-----------+------------------+------------------------------------------------------------------------+ 4 rows in set (0.00 sec)
#######
mysql5.7之后的數據庫里mysql.user表里已經沒有password這個字段了,password字段改成了authentication_string。
mysql> select host,user,password from mysql.user; --這是mysql5.6及以下版本的查看命令, ERROR 1054 (42S22): Unknown column 'password' in 'field list'
============================= mysql8.0修改用戶密碼命令 ================================
mysql> use mysql;
mysql> ALTER USER
'root'
@
'localhost'
IDENTIFIED BY
'123456'
;
mysql> flush privileges;
二、二進制安裝
下載Mysql8.0.12地址: https:
//pan
.baidu.com
/s/1LyXrkrCPP7QKLrWYbLRBlw
提取密碼: emmf
刪除系統默認或之前可能安裝的其他版本的mysql
[root@mysql8-node ~]# for i in $(rpm -qa|grep mysql);do rpm -e $i --nodeps;done [root@mysql8-node ~]# rm -rf /var/lib/mysql && rm -rf /etc/my.cnf
安裝依賴包,創建用戶、解壓安裝包
[root@mysql8-node ~]# yum -y install libaio [root@mysql8-node ~]# yum -y install net-tools [root@mysql8-node ~]# groupadd mysql [root@mysql8-node ~]# useradd -g mysql mysql [root@mysql8-node ~]# cd /usr/src/ [root@mysql-node src]# tar -zvxf mysql8.0.12_bin_centos7.tar.gz [root@mysql-node src]# mv mysql /usr/local/ [root@mysql-node src]# chown -R mysql.mysql /usr/local/mysql
- 將命令加入環境變量
[root@mysql-node src]# vim /home/mysql/.bash_profile export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH [root@mysql-node src]# source /home/mysql/.bash_profile [root@mysql-node src]# echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile [root@mysql-node src]# source /etc/profile
創建數據目錄
[root@mysql-node src]# mkdir -p /data/mysql/{data,log,binlog,conf,tmp} [root@mysql-node src]# chown -R mysql.mysql /data/mysql
配置mysql
[root@mysql-node src]
# su - mysql
[mysql@mysql-node ~]$ vim
/data/mysql/conf/my
.cnf
[mysqld] lower_case_table_names = 1 user = mysql server_id = 1 port = 3306 default-time-zone = '+08:00' enforce_gtid_consistency = ON gtid_mode = ON binlog_checksum = none default_authentication_plugin = mysql_native_password datadir = /data/mysql/data pid-file = /data/mysql/tmp/mysqld.pid socket = /data/mysql/tmp/mysqld.sock tmpdir = /data/mysql/tmp/ skip-name-resolve = ON open_files_limit = 65535 table_open_cache = 2000 ################# innodb ######################## innodb_data_home_dir = /data/mysql/data innodb_data_file_path = ibdata1:512M;ibdata2:512M:autoextend innodb_buffer_pool_size = 12000M innodb_flush_log_at_trx_commit = 1 innodb_io_capacity = 600 innodb_lock_wait_timeout = 120 innodb_log_buffer_size = 8M innodb_log_file_size = 200M innodb_log_files_in_group = 3 innodb_max_dirty_pages_pct = 85 innodb_read_io_threads = 8 innodb_write_io_threads = 8 innodb_thread_concurrency = 32 innodb_file_per_table innodb_rollback_on_timeout innodb_undo_directory = /data/mysql/data innodb_log_group_home_dir = /data/mysql/data ################### session ########################### join_buffer_size = 8M key_buffer_size = 256M bulk_insert_buffer_size = 8M max_heap_table_size = 96M tmp_table_size = 96M read_buffer_size = 8M sort_buffer_size = 2M max_allowed_packet = 64M read_rnd_buffer_size = 32M ############ log set ################### log-error = /data/mysql/log/mysqld.err log-bin = /data/mysql/binlog/binlog log_bin_index = /data/mysql/binlog/binlog.index max_binlog_size = 500M slow_query_log_file = /data/mysql/log/slow.log slow_query_log = 1 long_query_time = 10 log_queries_not_using_indexes = ON log_throttle_queries_not_using_indexes = 10 log_slow_admin_statements = ON log_output = FILE,TABLE master_info_file = /data/mysql/binlog/master.info
- 初始化、啟動、登錄、重置初始密碼
6) 初始化 (稍等一會兒, 可以到/data/mysql/log/mysqld.err日子里查看初始化過程, 看看有沒有error信息) [mysql@mysql-node ~]$ mysqld --defaults-file=/data/mysql/conf/my.cnf --initialize-insecure --user=mysql 7) 啟動mysqld [mysql@mysql-node ~]$ mysqld_safe --defaults-file=/data/mysql/conf/my.cnf & [mysql@mysql-node ~]$ lsof -i:3306 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 24743 mysql 23u IPv6 23132988 0t0 TCP *:mysql (LISTEN) 8) 登錄mysql, 重置密碼 本地首次使用sock文件登錄mysql是不需要密碼的 [mysql@mysql-node ~]# mysql -S /data/mysql/tmp/mysqld.sock ............. mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; Query OK, 0 rows affected (0.07 sec) mysql> flush privileges; Query OK, 0 rows affected (0.03 sec) mysql> select host,user,authentication_string from mysql.user; +-----------+------------------+------------------------------------------------------------------------+ | host | user | authentication_string | +-----------+------------------+------------------------------------------------------------------------+ | localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | localhost | mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | localhost | mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | localhost | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | +-----------+------------------+------------------------------------------------------------------------+ 4 rows in set (0.00 sec) 退出, 此時密碼重置后, 就不能使用sock文件無密碼登錄了 [root@mysql-node ~]# mysql -S /data/mysql/tmp/mysqld.sock ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) [root@mysql-node ~]# mysql -p123456 mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 做sock文件的軟鏈接 [root@mysql-node ~]# ln -s /data/mysql/tmp/mysqld.sock /tmp/mysql.sock [root@mysql-node ~]# mysql -p123456 或者 [root@mysql-node ~]# mysql -uroot -S /data/mysql/tmp/mysqld.sock -p123456 ............. mysql> select version(); +-----------+ | version() | +-----------+ | 8.0.12 | +-----------+ 1 row in set (0.00 sec)
- 授權
#授予用戶權限. 必須先要創建用戶, 才能授權!! (創建用戶時要帶@並指定地址, 則grant授權時的地址就是這個@后面指定的!, 否則grant授權就會報錯!) mysql> create user 'kevin'@'%' identified by '123456'; Query OK, 0 rows affected (0.11 sec) mysql> grant all privileges on *.* to 'kevin'@'%' with grant option; Query OK, 0 rows affected (0.21 sec) mysql> select host,user,authentication_string from mysql.user; +-----------+------------------+------------------------------------------------------------------------+ | host | user | authentication_string | +-----------+------------------+------------------------------------------------------------------------+ | % | kevin | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | localhost | mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | localhost | mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | localhost | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | +-----------+------------------+------------------------------------------------------------------------+ 5 rows in set (0.00 sec) mysql> update mysql.user set host='172.16.60.%' where user="kevin"; Query OK, 1 row affected (0.16 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> flush privileges; Query OK, 0 rows affected (0.05 sec) mysql> select host,user,authentication_string from mysql.user; +-------------+------------------+------------------------------------------------------------------------+ | host | user | authentication_string | +-------------+------------------+------------------------------------------------------------------------+ | 172.16.60.% | kevin | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | localhost | mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | localhost | mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | localhost | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | +-------------+------------------+------------------------------------------------------------------------+ 5 rows in set (0.00 sec) mysql> create user 'bobo'@'172.16.60.%' identified by '123456'; Query OK, 0 rows affected (0.09 sec) mysql> grant all privileges on *.* to 'bobo'@'172.16.60.%'; Query OK, 0 rows affected (0.17 sec) mysql> flush privileges; Query OK, 0 rows affected (0.04 sec) mysql> select host,user,authentication_string from mysql.user; +-------------+------------------+------------------------------------------------------------------------+ | host | user | authentication_string | +-------------+------------------+------------------------------------------------------------------------+ | 172.16.60.% | bobo | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | 172.16.60.% | kevin | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | localhost | mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | localhost | mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | localhost | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | +-------------+------------------+------------------------------------------------------------------------+ 6 rows in set (0.00 sec) mysql> show grants for kevin@'172.16.60.%'; +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Grants for kevin@172.16.60.% | +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 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 | +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
MySQL單機多實例安裝配置
上面已經有了一個3306端口的MySQL實例, 現在需要再起來兩個實例, 分別為3307, 3308. 操作如下:
- 創建數據目錄、生成和修改mysql配置文件
#創建實例的數據目錄 [root@mysql-node ~]# mkdir -p /data/mysql3307/{data,log,binlog,conf,tmp} [root@mysql-node ~]# mkdir -p /data/mysql3308/{data,log,binlog,conf,tmp} [root@mysql-node ~]# chown -R mysql.mysql /data/mysql3307 [root@mysql-node ~]# chown -R mysql.mysql /data/mysql3308 #配置mysql [root@mysql-node ~]# cp -r /data/mysql/conf/my.cnf /data/mysql3307/conf/ [root@mysql-node ~]# cp -r /data/mysql/conf/my.cnf /data/mysql3308/conf/ [root@mysql-node ~]# sed -i 's#/data/mysql/#/data/mysql3307/#g' /data/mysql3307/conf/my.cnf [root@mysql-node ~]# sed -i 's#/data/mysql/#/data/mysql3308/#g' /data/mysql3308/conf/my.cnf [root@mysql-node ~]# sed -i 's/3306/3307/g' /data/mysql3307/conf/my.cnf [root@mysql-node ~]# sed -i 's/3306/3308/g' /data/mysql3308/conf/my.cnf [root@mysql-node ~]# chown -R mysql.mysql /data/mysql*
- 初始化實例、啟動mysql、設置密碼
進行初始化兩個實例 [root@mysql-node ~]# mysqld --defaults-file=/data/mysql3307/conf/my.cnf --initialize-insecure --user=mysql [root@mysql-node ~]# mysqld --defaults-file=/data/mysql3308/conf/my.cnf --initialize-insecure --user=mysql 接着啟動mysqld [root@mysql-node ~]# mysqld_safe --defaults-file=/data/mysql3307/conf/my.cnf & [root@mysql-node ~]# mysqld_safe --defaults-file=/data/mysql3308/conf/my.cnf & [root@mysql-node ~]# ps -ef|grep mysql mysql 23996 1 0 14:37 ? 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/conf/my.cnf 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 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 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 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 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 root 32044 23727 0 15:34 pts/0 00:00:00 grep --color=auto mysql [root@mysql-node ~]# lsof -i:3307 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 31191 mysql 22u IPv6 23144844 0t0 TCP *:opsession-prxy (LISTEN) [root@mysql-node ~]# lsof -i:3308 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 31977 mysql 22u IPv6 23145727 0t0 TCP *:tns-server (LISTEN) [root@mysql-node ~]# lsof -i:3306 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 24743 mysql 23u IPv6 23132988 0t0 TCP *:mysql (LISTEN) 登錄3307端口實例, 並設置密碼 [root@mysql-node ~]# mysql -S /data/mysql3307/tmp/mysqld.sock ............ mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; Query OK, 0 rows affected (0.11 sec) mysql> flush privileges; Query OK, 0 rows affected (0.11 sec) 退出, 使用新密碼登錄 [root@mysql-node ~]# mysql -uroot -S /data/mysql3307/tmp/mysqld.sock -p123456 ............. mysql> 同理, 登錄3308端口實例, 並設置密碼 [root@mysql-node ~]# mysql -S /data/mysql3308/tmp/mysqld.sock ........... mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; Query OK, 0 rows affected (0.13 sec) mysql> flush privileges; Query OK, 0 rows affected (0.03 sec) 退出, 使用新密碼登錄 [root@mysql-node ~]# mysql -uroot -S /data/mysql3308/tmp/mysqld.sock -p123456 .................... mysql> ========================================== 3306, 3307, 3308三個端口實例的啟動命令分別為: mysqld_safe --defaults-file=/data/mysql/conf/my.cnf & mysqld_safe --defaults-file=/data/mysql3307/conf/my.cnf & mysqld_safe --defaults-file=/data/mysql3308/conf/my.cnf & 登錄命令分別為: mysql -uroot -S /data/mysql/tmp/mysqld.sock -p123456 mysql -uroot -S /data/mysql3307/tmp/mysqld.sock -p123456 mysql -uroot -S /data/mysql3308/tmp/mysqld.sock -p123456
編寫mysql多端口實例的登錄腳本
上面的多端口實例配置之后, 查看一個登錄腳本:myin (注意將腳本中的密碼改為自己的密碼)
- 編寫登錄腳本並授權(此處故障解決方法在下方)
[root@mysql-node ~]# ll /usr/local/mysql/bin/myin -rwxrwxr-x 1 mysql mysql 161 Aug 22 2018 /usr/local/mysql/bin/myin [root@mysql-node ~]# cat /usr/local/mysql/bin/myin #!/bin/bash p=$1 shift mysql -h"127.0.0.1" -P"$p" --default-character-set=utf8mb4 --show-warnings -uroot -p'123456' -A --prompt="(\u@\p)[\d]> " "$@"
- 嘗試登錄
[mysql@mysql-node ~]# myin 3306 mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 1130 (HY000): Host '127.0.0.1' is not allowed to connect to this MySQL server
- 解決方法
這是因為各個端口實例中的root用戶授權的是localhost, 而不是127.0.0.1, 則可以再次添加一個針對127.0.0.1的root用戶授權或者將myin腳本中的127.0.0.1 修改為 localhost
[root@mysql-node ~]# sed -i 's/127.0.0.1/localhost/g' /usr/local/mysql/bin/myin [root@mysql-node ~]# cat /usr/local/mysql/bin/myin #!/bin/bash p=$1 shift mysql -h"localhost" -P"$p" --default-character-set=utf8mb4 --show-warnings -uroot -p'123456' -A --prompt="(\u@\p)[\d]> " "$@" 則現在可以登錄各個實例了, 登錄命令為"myin port" 登錄3306端口實例 [root@mysql-node ~]# myin 3306 > 登錄3307端口實例 [root@mysql-node ~]# myin 3307 > 登錄3308端口實例 [root@mysql-node ~]# myin 3308 >
生產環境下的思路: 同一個業務庫單獨放在一個實例下, 不要混用數據庫. 單機多實例間可以做主從或主主同步, 也可以在多機多實例之間坐主從或主主同步.
比如:
A機器有三個實例: 3310, 3311, 3312
B機器有三個實例: 3310, 3311, 3312
C機器有三個實例: 3310, 3311, 3312
則三台機器的每個對應的端口實例之間做主從或主主同步(GTID, MGR), 一主兩從, 或三主模式. (多實例環境最好不要用3306端口, 否則經常會出現一些誤操作)
三、Mysql8.0使用過程中踩過的一些坑
1) 創建用戶和授權
在mysql8.0創建用戶和授權和之前不太一樣了,其實嚴格上來講,也不能說是不一樣, 只能說是更嚴格, mysql8.0需要先創建用戶(創建用戶時要帶@並指定地址, 則grant授權時的地址就是這個@后面指定的!, 否則grant授權就會報錯!)和設置密碼,然后才能授權。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
mysql> create user
'kevin'
@
'%'
identified by
'123456'
;
Query OK, 0 rows affected (0.04 sec)
mysql> grant all privileges on *.* to
'kevin'
@
'%'
with grant option;
Query OK, 0 rows affected (0.04 sec)
mysql> create user
'bobo'
@
'%'
identified by
'123456'
;
Query OK, 0 rows affected (0.06 sec)
mysql> grant all privileges on *.* to
'bobo'
@
'%'
with grant option;
Query OK, 0 rows affected (0.03 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.04 sec)
mysql>
select
host,user,authentication_string from mysql.user;
+-----------+------------------+------------------------------------------------------------------------+
| host | user | authentication_string |
+-----------+------------------+------------------------------------------------------------------------+
| % | bobo | $A$005$1VY")q?G6<^X@-6LsXrPt5C0TwlTuvHbaOa3sYF0DKViIGoRPuCF8AzwiFcim1 |
| % | kevin | $A$005$hy`U}ZB
#R::rA8W0y2rmwgySqzv0rmR1eTeNDSaXfQPWIsrh7ytbVdi85 |
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root | $A$005$
/VO_y
^7,]6;2qxggBLmJzhA0Qylu5
/AHuRScZ/ykKedgZKh/6krOIzPs2
|
+-----------+------------------+------------------------------------------------------------------------+
|
如果還是用Mysql5.7及之前版本的直接授權的方法, 會有報錯:
1
2
|
mysql> grant all privileges on *.* to
'shibo'
@
'%'
identified by
'123456'
;
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
mysql>
select
host,user,authentication_string from mysql.user;
+-----------+------------------+------------------------------------------------------------------------+
| host | user | authentication_string |
+-----------+------------------+------------------------------------------------------------------------+
| % | bobo | $A$005$1VY")q?G6<^X@-6LsXrPt5C0TwlTuvHbaOa3sYF0DKViIGoRPuCF8AzwiFcim1 |
| % | kevin | $A$005$hy`U}ZB
#R::rA8W0y2rmwgySqzv0rmR1eTeNDSaXfQPWIsrh7ytbVdi85 |
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root | $A$005$
/VO_y
^7,]6;2qxggBLmJzhA0Qylu5
/AHuRScZ/ykKedgZKh/6krOIzPs2
|
+-----------+------------------+------------------------------------------------------------------------+
6 rows
in
set
(0.00 sec)
如果想要遠程登錄, 則需要進行update更新下root賬號的權限
mysql> update mysql.user
set
host=
'%'
where user=
"root"
;
Query OK, 1 row affected (0.10 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.14 sec)
mysql>
select
host,user,authentication_string from mysql.user;
+-----------+------------------+------------------------------------------------------------------------+
| host | user | authentication_string |
+-----------+------------------+------------------------------------------------------------------------+
| % | bobo | $A$005$1VY")q?G6<^X@-6LsXrPt5C0TwlTuvHbaOa3sYF0DKViIGoRPuCF8AzwiFcim1 |
| % | kevin | $A$005$hy`U}ZB
#R::rA8W0y2rmwgySqzv0rmR1eTeNDSaXfQPWIsrh7ytbVdi85 |
| % | root | $A$005$
/VO_y
^7,]6;2qxggBLmJzhA0Qylu5
/AHuRScZ/ykKedgZKh/6krOIzPs2
|
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
+-----------+------------------+------------------------------------------------------------------------+
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
3
4
5
6
7
8
9
10
11
|
#修改加密規則
mysql> ALTER USER
'root'
@
'%'
IDENTIFIED BY
'123456'
PASSWORD EXPIRE NEVER;
Query OK, 0 rows affected (0.16 sec)
#更新一下用戶的密碼
mysql> ALTER USER
'root'
@
'%'
IDENTIFIED WITH mysql_native_password BY
'123456'
;
Query OK, 0 rows affected (0.08 sec)
#刷新權限
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.03 sec)
|
這樣問題就解決了。
4) sqlyog鏈接時出現2058異常
1
2
3
4
5
6
|
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'
;
|
5) 修改默認編碼方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
mysql8.0默認編碼方式為utf8mb4,因此使用時不需要修改,可使用如下命令查看:
mysql > SHOW VARIABLES WHERE Variable_name LIKE
'character_set_%'
OR Variable_name LIKE
'collation%'
;
如果需要修改其他編碼方式,比如需要修改為utf8mb4,可以使用如下方式:
修改mysql配置文件my.cnf, 找到后請在以下三部分里添加如下內容:
[client]
default-character-
set
= utf8mb4
[mysql]
default-character-
set
= utf8mb4
[mysqld]
character-
set
-client-handshake = FALSE
character-
set
-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect=
'SET NAMES utf8mb4'
然后重啟mysqld服務即可, 其中:
character_set_client (客戶端來源數據使用的字符集)
character_set_connection (連接層字符集)
character_set_database (當前選中數據庫的默認字符集)
character_set_results (查詢結果字符集)
character_set_server (默認的內部操作字符集)
========================================
數據庫連接參數中:
characterEncoding=utf8 會被自動識別為utf8mb4,也可以不加這個參數,會自動檢測。
而autoReconnect=
true
是必須加上的。
|
6) 部分參數配置查詢命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#查詢mysql最大連接數設置
mysql> show global variables like
'max_conn%'
;
mysql> SELECT @@MAX_CONNECTIONS AS
'Max Connections'
;
# 查看最大鏈接數
mysql> show global status like
'Max_used_connections'
;
# 查看慢查詢日志是否開啟以及日志位置
mysql> show variables like
'slow_query%'
;
# 查看慢查詢日志超時記錄時間
mysql> show variables like
'long_query_time'
;
# 查看鏈接創建以及現在正在鏈接數
mysql> show status like
'Threads%'
;
# 查看數據庫當前鏈接
mysql> show processlist;
# 查看數據庫配置
mysql> show variables like
'%quer%'
;
|