theboyaply
theboyaply
发布于 2022-07-04 / 605 阅读
0
0

Linux安装MySQL8

1. 查看是否安装mysql

安装mysql之前,需要查看是否安装了mysql,如果安装则进行卸载,命令:

rpm -qa | grep mysql

卸载命令:

rpm -e --nodeps mysql-*

查看是否安装mariadb数据库,如果存在,则卸载,命令:

rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.35-3.el7.x86_64

2. 下载mysql安装包

结合命令cat /etc/system-releasegetconf LONG_BIT查看需要下载的mysql包,命令分别表示系统发行版本和位数。

下载地址:点击访问>mysql官方下载地址<

操作系统可选Linux - Generic,这个下面的安装包是通用的。

本文以mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz为例。链接地址:https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz

3. 解压及配置文件

把下载的安装包放到/data/mysql下并进行解压,然后把解压后的文件重命名为mysql

[root@% mysql]# pwd
/data/mysql

[root@% mysql]# ls
mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz

[root@% mysql]# tar -Jxvf mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz
[root@% mysql]# mv mysql-8.0.27-linux-glibc2.12-x86_64 mysql

[root@% mysql]# ls
mysql  mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz

复制配置文件并编辑,把mysql下的配置文件覆盖到/etc/my.cnf,并修改/etc/my.cnf内容:

[root@% support-files]# pwd
/data/mysql/mysql/support-files

[root@% support-files]# ls
magic  my-default.cnf  mysqld_multi.server  mysql-log-rotate  mysql.server

[root@% support-files]# cp /data/mysql/mysql/support-files/my-default.cnf /etc/my.cnf
[root@% support-files]# vin /etc/my.cnf

配置内容如下,可根据需要增加其他配置:

[mysqld]
basedir=/data/mysql/mysql
datadir=/data/mysql/mysql/data
port=3306
user=mysql
# 允许最大连接数
max_connections=400
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8mb4
# 排序规则
collation_server=utf8mb4_general_ci
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
max_allowed_packet=16M
#linux不区分表大小写0区分1不区分
lower_case_table_names=1
#log-error=/var/log/mariadb/mariadb.log
log-error=/data/mysql/mysql/log/mysql.err
pid-file=/data/mysql/mysql/mysql.pid
# 开启binlog需要指定server-id
server-id=1
# binlog文件的前缀
#log-bin=mysql-bin
# binlog文件保存的天数,默认0表示永久保存
#expire_logs_days=15
# 缓存大小,一般生产服务器需要配置,建议为服务器总内存50%,默认128M
innodb_buffer_pool_size=4G
innodb_flush_log_at_trx_commit=1
# socket=/var/lib/mysql/mysql.sock
# 建议就放在这个位置,登录mysql时会从这里找mysql.sock
socket=/tmp/mysql.sock
innodb_data_file_path = ibdata1:1G;ibdata2:12M:autoextend:max:5G

#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

#default_authentication_plugin=mysql_native_password

创建mysql用户组及权限

创建mysql用户组和用户并修改权限:

[root@% mysql]# groupadd mysql
[root@% mysql]# useradd -r -g mysql mysql
[root@% mysql]# chown mysql:mysql -R /data/mysql/mysql

创建日志和数据目录

mysql目录下创建datalog目录:

[root@% mysql]# mkdir data log

初始化数据库

进入bin目录并执行初始化命令:

[root@% bin]# pwd
/data/mysql/mysql/bin
[root@% bin]# ./mysqld --defaults-file=/etc/my.cnf --basedir=/data/mysql/mysql/ --datadir=/data/mysql/mysql/data/ --user=mysql --initialize

运行后查看/data/mysql/mysql/log目录下的日志文件mysql.err,如果初始化成功,会出现初始化的root密码:

2022-07-04T00:57:32.985124Z 0 [System] [MY-013169] [Server] /data/mysql/mysql/bin/mysqld (mysqld 8.0.27) initializing of server in progress as process 16593
2022-07-04T00:57:32.993320Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2022-07-04T00:57:39.091347Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2022-07-04T00:57:39.898388Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1 is enabled for channel mysql_main
2022-07-04T00:57:39.898411Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1.1 is enabled for channel mysql_main
2022-07-04T00:57:40.027646Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: iio1f4Gdfk:h

如果失败,则根据日志文件的信息自行排错。(按照上面的配置文件,可能是log-error的配置导致的失败,把log-error放到[mysqld_safe]块下再试试。具体原因可以自己搜搜)。

设置mysql环境变量

/data/mysql/mysql/bin加入到环境变量中,在末尾追加:

export PATH=/data/mysql/mysql/bin:$PATH

使用source /etc/profile使其生效。

如果配置后,使用mysql命令提示bash: mysql: command not found...,那么再添加一个软连接:

[root@% bin]# ln -s /data/mysql/mysql/bin/mysql /usr/bin

设置开机自启

[root@% bin]# cp /data/mysql/mysql/support-files/mysql.server /etc/init.d/mysql
[root@% bin]# cp /data/mysql/mysql/support-files/mysql.server /etc/rc.d/init.d/mysql

增加 mysql 服务控制脚本执行权限

[root@% bin]# chmod +x /etc/rc.d/init.d/mysql

mysql 服务加入到系统服务

[root@% bin]# chkconfig --add mysql

启/停/登录

[root@% bin]# service mysql start
[root@% bin]# service mysql stop
[root@% bin]# service mysql restart
[root@% bin]# mysql -uroot -p

用户相关

修改root默认密码

5.7版本可使用以下语句进行修改:

mysql> set password for root@localhost = password('123456');

8版本及以上就需要使用以下语句进行修改:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

注意,上面的WITH mysql_native_password可以去掉或者换成WITH caching_sha2_password。其中caching_sha2_password是8版本及以上的默认值。

新增用户

mysql8版本在创建新用户时,请先创建用户,再赋予权限:

mysql> create user 'tom2'@'%' identified by '123456';
mysql> grant all privileges on *.* to 'tom'@'%' with grant option;
mysql> flush privileges;

注意,新增的用户如果用Navicat连接提示2059 - authentication plugin 'caching_sha2_password' xxx,请看下面常见问题的解决方案。

其他操作

请跳转到Linux安装MySQL5.7查看。

常见问题

2059 - authentication plugin ‘caching_sha2_password’

如果使用Navicat连接数据库提示以上错误,是因为MySQL新版本(8以上版本)的用户登录方式默认是【caching_sha2_password】,Navicat不支持这种用户登录账户加密方式。

具体用户是哪种登录方式可使用以下命令查看:

mysql> select host,user,plugin from mysql.user;
+-----------+------------------+-----------------------+
| host      | user             | plugin                |
+-----------+------------------+-----------------------+
| %         | tom              | caching_sha2_password |
| localhost | mysql.infoschema | caching_sha2_password |
| localhost | mysql.session    | caching_sha2_password |
| localhost | mysql.sys        | caching_sha2_password |
| localhost | root             | mysql_native_password |
+-----------+------------------+-----------------------+

可以看到,如果我们使用navicat登录tom用户的话,就会报错。

只需将tom用户的plugin改为mysql_native_password即可正常登录:

mysql> ALTER USER 'tom'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

– end –


评论