1、mysql官网找到社区版版本入口进入;https://dev.mysql.com/downloads/mysql
可以用wget https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
2、服务器上进行解压,由于是xz文件需要二次解压
第一步:xz -d mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz
第二步:tar -xvf mysql-8.0.19-linux-glibc2.12-x86_64.tar
3、将解压解包后的文件夹copy到/usr/local/下并重命名为mysql
cp -r mysql-8.0.19-linux-glibc2.12-x86_64 /usr/local/mysql
4、初次安装mysql会遇到缺少libaio.so异常,所以先安装libaio
yum -y install libaio
5、mysql必须的binlog、logs、run、data这些文件存储的地方需要提前准备好
(注意:以下是我个人规划的路径,结合my.cnf的配置去规划文件夹路径)
binlogs:是mysql运行时sql执行日志
data:数据库文件存放路径
logs:运行或者错误日志路径
run:运行时进程文件
6、mysql创建成随linux系统自启动服务中;复制启动、关闭脚本到/etc/init.d中
cp -r /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
7、mysql的自启动脚本会优先检索/etc目录下my.cnf的配置文件,所以需要提前创建
[client]
port = 3306
socket = /usr/local/mysql/run/mysql.sock
[mysqld]
port = 3306
socket = /usr/local/mysql/run/mysql.sock
pid_file = /usr/local/mysql/run/mysql.pid
datadir = /usr/local/mysql/data
default_storage_engine = InnoDB
max_allowed_packet = 512M
max_connections = 2048
open_files_limit = 65535
#innodb_force_recovery=1
skip-name-resolve
#skip-grant-tables
#bind-address = 127.0.0.1
bind-address = 0.0.0.0
lower_case_table_names=1
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
innodb_buffer_pool_size = 1024M
innodb_log_file_size = 2048M
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 0
key_buffer_size = 64M
log-error = /usr/local/mysql/logs/mysql_error.log
log-bin = /usr/local/mysql/binlogs/mysql-bin
slow_query_log = 1
slow_query_log_file = /usr/local/mysql/logs/mysql_slow_query.log
long_query_time = 5
tmp_table_size = 32M
max_heap_table_size = 32M
# query_cache_type = 0
# query_cache_size = 0
server-id=1
#log_bin_trust_routine_creators=1
wait_timeout=31536000
注意:从安全角度建议,生产环境中这两项不要这样配置
port=3306(mysql人人皆知的端口,初级黑客很容易侵入)
bind-address = 0.0.0.0(如果该服务器有多网卡模式,那么所有IP都能访问这个数据库)
8、进入到/usr/local目录下,创建用户和用户组并授权
cd /usr/local/
groupadd mysql
useradd -r -g mysql mysql
cd mysql/ # 注意:进入mysql文件下授权所有的文件
chown -R mysql:mysql ./
注意:如果第五步按照my.cnf创建的这些文件夹binlog、log、run、data不在/usr/local中,需要另外给mysql用户授权一次,否则启动时会遇到权限问题;
9、初始化数据库
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
注意:控制台中没有看到初始化日志,则需要去logs文件中查看日志,大概位置如下图
10、此时启动mysql,命令是service mysqld start,但是会遇到异常“The server quit without updating PID file”,可能是初始化的时候进程文件已经存在,需要手动删除;
ps -ef|grep mysql
kill -9 进程号
11、linux控制台登陆mysql更新密码
/usr/local/mysql/bin/mysql -u root -p
会提示输入密码,这时需要输入刚才初始化生成的密码
12、更改密码
alter user 'root'@'localhost' identified by '新密码';
*****************************mysql客户端通讯遇到的一些问题如下:
问题一:远程登陆报错,是需要修改user表,操作方式是:
(1)终端登陆:/usr/local/mysql/bin/mysql -u root -p
(2)进入mysql数据库:use mysql
(3)查询用户 SELECT HOST,USER FROM USER;
(4)host默认值都是localhost,需要修改root用户的host值为%;
(5)执行:update user set host='%' where user ='root';
(6)执行刷新权限:flush privileges;
问题二:我明明是修改了root密码为123456,但是远程无法用该密码登陆,经过分析mysql8以上版本密码格式默认是caching_sha2_password,我们希望改成mysql_native_password,具体的分析过程如下:
(1)登录Mysql:mysql -u root -p
(2)选择数据库:use mysql
(3)查看plugin设置:select host, user, plugin from user;
(4)可以看到root的plugin是caching_sha2_password,我们希望改成mysql_native_password:
alter user 'root'@'%' identified WITH mysql_native_password by '123456';
(5)执行刷新权限:flush privileges;
问题三:
MySQL开启bin-log后,调用存储过程或者函数以及触发器时,会出现错误号为1418的错误:
在MySQL配置文件my.ini或my.cnf中加上: log-bin-trust-function-creators=1