centos7 安装 mysql8.0.16 单实例
参考链接
- https://www.linuxidc.com/Linux/2019-01/156602.htm
- https://www.cnblogs.com/bjx2020/p/10682518.html
- https://blog.51cto.com/aimax/2150021
- https://blog.csdn.net/vkingnew/article/details/81267223
- https://blog.csdn.net/u013246891/article/details/81747639
- http://blog.itpub.net/30126024/viewspace-2221483/
- https://blog.51cto.com/aimax/2150021
关闭selinux
修改 /etc/selinux/config,把
1SELINUX=enforcing
改为
1SELINUX=disabled
安装前要卸载 mariadb
查询 mariadb:
1rpm -qa | grep mariadb
卸载 mariadb:
1rpm -e mariadb-server-5.5.52-1.el7.x86_64
2rpm -e mariadb-libs-5.5.52-1.el7.x86_64
安装 mysql 依赖
1yum install gcc gcc-c++ openssl openssl-devel libaio libaio-devel ncurses ncurses-devel perl -y
如果是Ubuntu,则安装依赖:apt install libaio1 libaio-dev libncurses5 libncurses5-dev -y
创建mysql 用户和组,并设置禁止登陆系统
1groupadd mysql
2useradd -r -g mysql -s /bin/false mysql
下载 mysql,并解压
1wget http://mirrors.163.com/mysql/Downloads/MySQL-8.0/mysql-8.0.16-linux-glibc2.12-x86_64.tar.xz
2tar -xvJf mysql-8.0.16-linux-glibc2.12-x86_64.tar.xz -C /app
创建软连接
1ln -s /app/mysql-8.0.16-linux-glibc2.12-x86_64 /usr/local/mysql
配置环境变量
在 /etc/profile 在最后添加:
1export PATH=$PATH:/usr/local/mysql/bin
使环境变量生效:
1source /etc/profile
如果存在之前的 mysql 配置文件,删除(或移动)之:
1mv /etc/my.cnf /etc/my.cnf.`date +%Y%m%d%H%M`
创建数据目录,并修改数据目录的用户及用户组
1mkdir -p /app/mysqldata/3306/{data,logs,tmp}
2chown -R mysql:mysql /app/mysqldata/3306
初始化数据库(任选其一)
注意:本文以无密码初始化方式
有密码初始化
会在控制台输出临时密码,官方推荐该方式:
1mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/app/mysqldata/3306/data --initialize
无密码初始化
方便,但密码自行需要修改:
1mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/app/mysqldata/3306/data --initialize-insecure
设置 mysql (my.cnf)
新建 /app/mysqldata/3306/my.cnf,内容如下:
1[client]
2port=3306
3socket=/app/mysqldata/3306/tmp/mysql.sock
4[mysqld]
5user=mysql
6server-id=3306
7port=3306
8mysqlx_port=33060
9basedir=/usr/local/mysql
10datadir=/app/mysqldata/3306/data
11plugin-dir=/usr/local/mysql/lib/plugin
12tmpdir=/app/mysqldata/3306/tmp
13socket=/app/mysqldata/3306/tmp/mysql.sock
14mysqlx_socket=/app/mysqldata/3306/tmp/mysqlx.sock
15pid-file=/app/mysqldata/3306/tmp/mysql.pid
16log-error=/app/mysqldata/3306/tmp/mysql-error.log
17character-set-server=utf8mb4
18collation-server=utf8mb4_unicode_ci
19
20# 如果是开发,下面的配置可以有效降低mysql的内存占用
21performance_schema_max_table_instances=400
22table_definition_cache=400
23table_open_cache=256
24performance_schema=off
一般来说,单实例只要设置mysqld中的 port、basedir、datadir、character-set-server 即可
启动数据库服务(任选其一)
以守护进程方式启动
1mysqld_safe --defaults-file=/app/mysqldata/3306/my.cnf &
普通方式启动
1mysqld --defaults-file=/app/mysqldata/3306/my.cnf &
首次启动可能会出现一个错误:
1mysqld_safe error: log-error set to '/app/mysqldata/3306/tmp/mysql-error.log', however file don't exists. Create writable for user 'mysql'.
这是文件读写权限造成的错误,因此,我们可以手动创建/app/mysqldata/3306/tmp/mysql-error.log,然后修改其用户和用户组信息:
1echo '' >> /app/mysqldata/3306/tmp/mysql-error.log
2chown mysql:mysql /app/mysqldata/3306/tmp/mysql-error.log
然后再次运行启动数据库的命令。
首次登录方式
注:本文是以无密码初始化,所以首次登录不需要密码
1mysql -S /app/mysqldata/3306/tmp/mysql.sock
登录后,可修改 root 初始化密码:
1alter user 'root'@'localhost' identified with mysql_native_password by 'root';
创建 root@% 用于远程登录:
1create user 'root'@'%' identified by 'root';
2grant all privileges on *.* to 'root'@'%' with grant option;
刷新用户权限:
1flush privileges;
再次登录
上一步已经为 root 设置了密码,所以,如果退出后再次登录数据库,就需要携带密码进行登录:
1mysql -S /app/mysqldata/3306/tmp/mysql.sock -u root -p
关闭数据库服务
1mysqladmin shutdown -S /app/mysqldata/3306/tmp/mysql.sock -u root -p
问题汇总
mysql8 密码规则问题
默认情况下,创建的连接用户的密码规则为caching_sha2_password,该规则可能造成客户端连接时密码出错。
解决方法是,修改密码时指定密码规则为mysql_native_password,如:
1alter user 'root'@'localhost' identified with mysql_native_password by 'root';
或者一劳永逸,直接修改 mysql 的启动配置文件,在[mysqld]节点后追加:
1default-authentication-plugin=mysql_native_password
创建 /etc/my.cnf 的软连接
1ln -s /app/mysqldata/3306/my.cnf /etc/my.cnf
这只是一个建议。
因为mysql在启动时、或者执行相关命令时,会优先读取该配置文件中的配置,所以启动mysql 不需要指定 –defaults-file;
同时,运行 mysqladmin、mysql等命令时,无需指定 sock 等配置;
但要注意:如果在同一机器上有多个mysql实例,则需要指定配置文件、或者sock来运行相关命令。
设置 mysql 服务开机启动
如果使用下面的方式,必须保证 /etc/my.cnf 存在
复制文件到启动目录
1cp /app/mysql-8.0.16-linux-glibc2.12-x86_64/support-files/mysql.server /etc/init.d/mysqld
确保 /etc/init.d/mysqld 可执行
添加开机服务,并查看服务状态
1#### 添加 mysql 开机服务
2chkconfig --add mysqld
3
4#### 开启 mysql 服务
5chkconfig mysqld on
6
7#### 删除 mysql 开机服务
8chkconfig --del mysqld
9
10#### 列出 chkconfig 已知的、所有服务的详情
11chkconfig --list
12
13#### 只列出 mysql 的服务详情
14chkconfig --list mysqld
数据库服务的启动和关闭
1#### 启动数据库服务
2service mysqld start
3
4#### 关闭数据库服务
5service mysqld stop
6
7#### 重启数据库服务
8service mysqld restart
mysql 创建用户并授权
1create user 'zcily'@'%' identified with mysql_native_password BY 'loveYuRui@801';
2grant all privileges on *.* to 'zcily'@'%' with grant option;
3flush privileges;
评论