我们来安装下mysql数据库,目前mysql的最新版本是8.0.13。mysql版本不一样,在安装时部分细节可能是不一样的。下面的安装流程以8.0.13版本为准。
注意:在安装前,不管是在阿里云还是腾讯云买的主机,要确认下主机所属安全组有没有开放mysql访问相关端口【3306】。不然的话,我们无法使用Navicat连接数据库。
MySQL的安装:
①进入官网(www.mysql.com)获取下载地址
MySQL Community Server 是开源免费的,这也是我们通常用的MySQL的版本。
选择操作系统,选择Linux通用的。楠神的ubuntu是64位的,所以mysql也选择64位的。
进入下载页面
获取下载地址:
https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.13-linux-glibc2.12-x86_64.tar.xz
②下载解压
cd /usr/local/src wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.13-linux-glibc2.12-x86_64.tar.xz
包是用xz方式压缩的,tar解压时需要加J参数
tar -xvJf mysql-8.0.13-linux-glibc2.12-x86_64.tar.xz 解压(包比较大,解压需要耐心等待下) cd mysql-8.0.13-linux-glibc2.12-x86_64 进入目录
发现没有configure文件,这是因为mysql的文件都是已编译好的,不需要编译了。
把mysql整个目录移动到 /usr/local里
mv mysql-8.0.13-linux-glibc2.12-x86_64 /usr/local/mysql
③添加系统mysql组和mysql用户
groupadd mysql useradd -r -g mysql mysql
mysql用户组创建好
mysql用户
进入安装mysql软件目录
cd /usr/local/mysql
创建目录data,用来存放数据库数据的目录。
mkdir data
处于安全考虑,修改当前目录为root用户(755)
chown -R root:root ./
但是要把data目录设置为mysql用户
chown mysql:mysql -R data
因为后面我们会用mysql用户允许mysql,而data目录是存放mysql表数据的,mysql用户必须拥有写权限。
④初始化MySQL
进入mysql的bin目录
./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
又报缺少库错误了,安装下:
初始化成功
可以看到系统随机给root用户分配了一个密码,如图所示,这个密码要记住,后面会用。
⑤启动mysql
&是后台运行的意思,执行命令
bin/mysqld_safe --user=mysql &
终端会卡在一个位置,再按一下Enter即可。
使用刚才随机生成的密码,可进入数据库
./mysql -uroot -p
⑥更改mysql的root用户密码
第一次使用随机登录并不能使用,因此我们需要更改密码,如下
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; flush privileges;
select user, host, plugin, authentication_string from user;
看下plugin这一栏的值是“caching_sha2_password”。有个重要的知识点需要知道:
plugin:登录密码加密规则。
MySQL 8默认使用了新的密码加密规则:caching_sha2_password,原先都是mysql_native_password。一些mysql客户端,如Navicat、PHP脚本,它不支持这种加密插件,就会报错,登录不了。怎么解决呢?要么升级客户端支持caching_sha2_password,要么把某一账户的密码加密规则改回mysql_native_password。
修改加密规则的SQL语句:
ALTER USER '用户名'@'地址' IDENTIFIED with mysql_native_password BY '新密码';
当前的root用户只对本机可用,如果从外网访问mysql,需要额外添加一个账户
CREATE USER '对外用户名'@'%' IDENTIFIED BY '新密码'; //创建用户 grant all on *.* to '对外用户名'@'%'; //赋予全部权利 flush privileges;
为了安全起见,mysql的root用户最好不要对外开放。
⑦mysql的关闭、重启
在mysql support-files目录中,有个mysql.server文件
./mysql.server stop 关闭mysql ./mysql.server start 开启mysql ./mysql.server restart 重启mysql
⑧mysql添加配置文件
mysql虽然开启了,当用
netstat -ant
会发现我们还没有开放mysql的端口服务,怎么开启呢?需要从配置文件中开启。mysql默认没有配置文件,需要我们创建/etc/my.cnf
我们都知道mysql的参数有很多,my.cnf中我们暂时先放一些基本的参数。
[client] port=3306 [mysql] default-character-set=utf8 [mysqld_safe] socket = /tmp/mysql.sock [mysqld] basedir = /usr/local/mysql/ datadir = /usr/local/mysql/data/ user=mysql bind-address = 0.0.0.0 port = 3306 socket = /tmp/mysql.sock character-set-server=utf8 max_allowed_packet = 10M max_connections=512 log_error=/var/log/mysqld.log wait_timeout = 28800
socket = /tmp/mysql.sock
为MySQL客户程序与服务器之间的本地通信指定一个套接字文件(仅适用于UNIX/Linux系统),指定路径前先看下是否存在,如不存在,使用find命令搜索下具体位置。
配置好配置文件,重启mysql。
备注:/tmp目录会自动清理文件,sock文件建议放到run目录中。
假如在mysql日志文件中出现了类似错误“Could not create unix socket lock file /var/run/mysql/mysql.sock.lock”,这种错误一般都是目录不存在或者权限不足,可使用命令 mkdir -p /var/run/mysql/ 创建该目录,然后设置目录权限 chown -R mysql:mysql /var/run/mysql/ 。
⑨使用Navicat登录mysql
填写好,连接报错了
原因是Navicat不支持caching_sha2_password,修改下密码加密规则:
再连接就OK了。
拓展:
PHP是否可以支持caching_sha2_password?
通过phpinfo()函数:
如果PHP不支持,在MySQL 8中创建(或修改)使用caching_sha2_password插件的账户需要改回mysql_native_password,这样先前版本的PHP就可以连接使用了。