2.linux安装mysql8
1.解压
[root@iZbp10m862v345mr7es0xjZ opt]# ls
jdk-15.0.1_linux-x64_bin.rpm redis-6.0.9 rh
mysql-8.0.20-linux-glibc2.12-x86_64.tar redis-6.0.9.tar.gz
[root@iZbp10m862v345mr7es0xjZ opt]# tar -xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar
2.修改压缩文件名并移动到/usr/local目录下
[root@iZbp10m862v345mr7es0xjZ opt]# mv mysql-8.0.20-linux-glibc2.12-x86_64 mysql
[root@iZbp10m862v345mr7es0xjZ opt]# ls
jdk-15.0.1_linux-x64_bin.rpm redis-6.0.9
mysql redis-6.0.9.tar.gz
mysql-8.0.20-linux-glibc2.12-x86_64.tar rh
[root@iZbp10m862v345mr7es0xjZ opt]# cp -r mysql /usr/local/
**易错点:**直接使用如下语句赋值文件
[root@iZbp10m862v345mr7es0xjZ opt]# cp mysql /usr/local/
cp: omitting directory ‘mysql’
#此时mysql是我要复制的文件夹名,出现该警告的原因是因为mysql目录下还存在文件,所以不能直接拷贝。
#解决办法:使用递归拷贝,在cp命令后面加上-r参数,如下:
[root@iZbp10m862v345mr7es0xjZ opt]# cp -r mysql /usr/local/
[root@iZbp10m862v345mr7es0xjZ opt]#
#这里的 -r 代表递归的意思。
#同样,当我们在linux系统下删除目录时也需要加上-r参数 ,如果目录为空,则会直接删除,如果目录非空,则会级联删除。如删除mysql文件夹:rm -rf mysql
3.创建mysql用户组和用户并修改权限
[root@iZbp10m862v345mr7es0xjZ opt]# groupadd mysql
[root@iZbp10m862v345mr7es0xjZ opt]# useradd -r -g mysql mysql
4.在/usr/local/mysql/下创建data目录并赋权限
[root@iZbp10m862v345mr7es0xjZ opt]# cd /usr/local/mysql/
[root@iZbp10m862v345mr7es0xjZ opt]# mkdir -p data
[root@iZbp10m862v345mr7es0xjZ opt]# chown mysql:mysql -R /usr/local/mysql/data
5.创建/tmp/mysql目录并赋权限
[root@iZbp10m862v345mr7es0xjZ opt]# mkdir /tmp/mysql
[root@iZbp10m862v345mr7es0xjZ opt]# chmod 777 /tmp/mysql
6.配置my.cnf
[root@iZbp10m862v345mr7es0xjZ opt]# vim /etc/my.cnf
内容如下:
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql/mysql.sock
user=mysql
port=3306
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#character config
character_set_server=utf8mb4
[mysqld_safe]
log-error=/usr/local/mysql/data/mysql.log
pid-file=/usr/local/mysql/data/mysql.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
7.初始化数据库
[root@iZbp10m862v345mr7es0xjZ mysql]# cd /usr/local/mysql/bin/
[root@iZbp10m862v345mr7es0xjZ bin]# ./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ --user=mysql --initialize
记录好初始化数据库密码:Y?/1e,iQe4qO
最好复制下来粘贴到记事本上,因为有些数据难以辨别
8.启动mysql
先将mysql.server放置到/etc/init.d/mysql中
[root@iZbp10m862v345mr7es0xjZ bin]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
cp: overwrite ‘/etc/init.d/mysql’? yes
启动
service mysql start
ps -ef|grep mysql
出现如下说明启动成功
[root@iZbp10m862v345mr7es0xjZ bin]# service mysql start
Starting MySQL..Logging to '/usr/local/mysql/data/mysql.log'.
.../usr/local/mysql/bin/mysqld_safe: line 199: 22987 Killed env MYSQLD_PARENT_PID=22778 nohup /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/data/mysql.log --pid-file=/usr/local/mysql/data/iZbp10m862v345mr7es0xjZ.pid --socket=/tmp/mysql/mysql.sock --port=3306 < /dev/null > /dev/null 2>&1
.... [ OK ]
[root@iZbp10m862v345mr7es0xjZ bin]# ps -ef|grep mysql
root 1519 1 0 09:31 pts/0 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/iZbp10m862v345mr7es0xjZ.pid
mysql 1728 1519 1 09:31 pts/0 00:00:01 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/data/mysql.log --pid-file=/usr/local/mysql/data/iZbp10m862v345mr7es0xjZ.pid --socket=/tmp/mysql/mysql.sock --port=3306
root 2330 5404 0 09:33 pts/0 00:00:00 grep --color=auto mysql
polkitd 31042 31016 0 Jul21 ? 00:00:50 mysqld
9.修改root密码
先此处建立软连接,不然会造成如下问题:
[root@iZbp10m862v345mr7es0xjZ bin]# mysql -u root -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
#此时查找mysql.sock位置
[root@iZbp10m862v345mr7es0xjZ bin]# find / -name mysql.sock
/usr/local/mysql/bin/mysql.sock
/tmp/mysql/mysql.sock
#建立软连接
[root@iZbp10m862v345mr7es0xjZ bin]# ln -s /tmp/mysql/mysql.sock /tmp/mysql.sock
[root@iZbp10m862v345mr7es0xjZ bin]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 83
Server version: 8.0.20
Copyright (c) 2000, 2020, 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>
再执行下面三步操作,然后重新登录:
#修改初始密码
mysql> alter user 'root'@'localhost' identified by 'root';
Query OK, 0 rows affected (0.14 sec)
mysql> ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
Query OK, 0 rows affected (0.07 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql>
10.配置远程连接
#访问mysql库
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
#使root能再任何host访问 修改host 否则不能远程连接
mysql> update user set host = '%' where user = 'root';
Query OK, 1 row affected (0.05 sec)
Rows matched: 1 Changed: 1 Warnings: 0
#刷新权限
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.02 sec)
mysql>
11.配置全局变量
使mysql命令可以在到处使用
vim /etc/profile
在底部新增
# Set mysql environment
export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/lib
保存退出
设置环境变量立即生效
source /etc/profiles
12.为了避免连接数据库时出现以下错误
上网搜索解决方案,网上说出现这种情况的原因是:mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password,
解决方法:
//把mysql用户登录密码加密规则还原成mysql_native_password.
//更新一下用户的密码
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
Query OK, 0 rows affected (0.01 sec)
FLUSH PRIVILEGES; #刷新权限