前言:本篇讲解在Linux系统安装mysql 5.7,在JDK,tomcat,mysql三个的安装过程中,mysql程序最为复杂,也最容易出错,稍不留神,可能就会出错,小错倒无所谓,很容易解决,大错让人毫无头绪,想卸载重装的时候,又发现,只要服务器上还有一点残余,都会影响到后续的安装,所以需要格外谨慎。说的有点过了,其实,只要注意一点,mysql的安装并没有那么恐怖,那就是因地制宜,因人而异,每个人服务器环境都不一样,如果照搬照抄而不结合自己的实际,那么就很容易陷入错误的境地,好了,废话不多说,言归正传。
(一)mysql的安装
1、解压安装:
执行命令将mysql安装到指定目录:
tar -zxvf /usr/local/app/mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz -C /usr/local
2、 添加用户组mysql和用户mysql,并将其添加到mysql用户组中
[root@izw mysql]# groupadd mysql
[root@izw mysql]# useradd -r -g mysql mysql
注: useradd -r参数表示mysql用户是系统用户,不可用于登录系统。
useradd -g参数表示把mysql用户添加到mysql用户组中。
3、检查是否安装了 libaio
[root@izw ~]# rpm -qa | grep libaio
如果没有安装,使用如下命令安装
[root@izw ~]#yum install -y libaio
4、编辑mysql配置文件:vim /etc/my.cnf
PS:要注意养成一个好习惯,像修改配置文件这种重要文件之前,应将原文件进行备份,以免出错时可能造成的后果乃至万劫不复的境地(说得有点严重了)。
添加上如下代码:
[client]
port = 3306
socket=/var/lib/mysql/mysql.sock
default-character-set = utf8mb4
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
socket=/var/lib/mysql/mysql.sock
[mysqld]
#skip-name-resolve
# 设置3306端口
port=3306
# 设置表名不分大小写
lower_case_table_names=1
# 解决mysql5.7分组查询的问题
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
explicit_defaults_for_timestamp=true
#skip-grant-tables
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符雿
character-set-server=utf8
# 创建新表时将使用的默认存储引擿
default-storage-engine=INNODB
max_allowed_packet=16M
# 设置mysql的安装目录
basedir=/usr/local/mysql
#datadir=/var/lib/mysql
datadir=/usr/local/mysql/data
socket=/var/lib/mysql/mysql.sock
5、进入到mysql安装目录,创建一个目录data用于mysql数据存放,该目录就是上面datadir的目录
[root@izw mysql]# mkdir data
6、将mysql目录的所属用户和组改为mysql
[root@izw mysql]# chown -R mysql:mysql ./
7、初始化mysqld 生成初始化密码
[root@izw mysql]# ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
如果出现以下提示,则初始化mysql密码成功:
2020-03-05T05:49:04.237914Z 0 [Warning] InnoDB: New log files created, LSN=45790
2020-03-05T05:49:04.359114Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2020-03-05T05:49:04.422438Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 0590fd1a-5ea5-11ea-bf5e-00163e04620f.
2020-03-05T05:49:04.424297Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2020-03-05T05:49:04.424724Z 1 [Note] A temporary password is generated for root@localhost: 5,Ws+QKWcj#X
其中5,Ws+QKWcj#X则为初始密码。
至此mysql就安装成功了。安装的时候,个别步骤出错则会产生一些问题,下面举几个常见例子:
例1:
如果出现这个问题则表/etc/my.cnf文件中的datadir值配错了,根据错误提示很容易知道,该目录必须是一个空目录,请参照第五步进行解决(mysql安装过程中有一个data存放目录,如果使用自带的这个data目录就会报这个错,需要使用自己创建的这个data目录)
例2:
如果出现这个问题,可能你漏了第三步。
例3:
如果出现该问题,则在/etc/my.cnf 文件中加上 : explicit_defaults_for_timestamp=true
(二)mysql的配置
安装好了,并不意味着就可以马上使用了,为了更方便今后工作上的需要,还需进行一些常规配置
1、设置开机启动,复制mysql.server脚本到资源目录,并赋予执行权限
[root@izw mysql]# cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@izw mysql]# chmod +x /etc/rc.d/init.d/mysqld
2、将 mysqld 服务加入到系统服务并检测是否生效:
[root@izw mysql]# chkconfig --add mysqld
[root@izw mysql]# chkconfig --list mysqld
Note: This output shows SysV services only and does not include native
systemd services. SysV configuration data might be overridden by native
systemd configuration.
If you want to list systemd services use 'systemctl list-unit-files'.
To see services enabled on particular target use
'systemctl list-dependencies [target]'.
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
得到以上图示结果说明生效。
注: 查看启动项:chkconfig --list | grep -i mysql 删除启动项:chkconfig --del mysql
3、启动mysqld,如果出现以下提示,则启动成功。
[root@izw mysql]# service mysqld start
Starting MySQL. [ OK ]
如果在出现以下问题:
说明权限方面出现问题,使用WinSCP去看的时候发现并没有/var/log/mariadb/mariadb.log这个路径和文件,
那我们就创建, 并给mysql用户授权即可
mkdir /var/log/mariadb
touch /var/log/mariadb/mariadb.log
chown -R mysql:mysql /var/log/mariadb/
其他可能存在的原因及其解决办法:
(1)、没有给/var/lib/mysql赋予权限给mysql 或为目录添加 777权限
(2)、没有将数据存储目录data授权给mysql ,完成授权,这里记得换为自己的data目录
chown -R mysql:mysql /usr/local/mysql/data
如果出现找不到mysql.sock、pid文件,可重新初始化,让其生成,无需卸载重装。初始化时,如果data目录有文件,需删掉,再创建个空白的data目录。
解决方法如下:
对于Mysql 5.7.6以后的5.7系列版本
Mysql使用mysqld --initialize
或mysqld --initialize-insecure命令来初始化数据库
4、配置环境变量,打开/etc/profile配置文件,添加如下内容:
#mysql环境变量
PATH=$PATH:/usr/local/mysql/bin
export PATH
然后执行命令source /etc/profile使其生效,最后通过echo $PATH命令检验环境变量配置是否成功,如果出现jdk和mysql的bin目录路径,则表明配置成功。
5、初次登录,修改密码,此处的密码使用的是上面第7步初始化密码时生成的密码,
如果登录成功,将会出现欢迎字样和mysql的版本信息,如果出现如下问题,请检查/etc/my.cnf中socket的配置,且须保持一致:
登录成功后,输入use mysql命令时,发现不能正常执行,相反弹出一个错误:
意思是你需要修改密码,否则不予执行,既然如此,那我们来修改密码:
mysql> SET PASSWORD = PASSWORD('123456');
Query OK, 0 rows affected, 1 warning (0.00 sec)
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
mysql> update user set authentication_string=PASSWORD('123456') where User='root';
Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 1
mysql>
6、设置数据库可远程访问,注意:下面的密码需替换为自己的密码。
mysql> grant all privileges on *.* to root@"%" identified by "123456" with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql>
至此就完成mysql的配置,下面我们使用navicat来测试一下远程连接,如果连接时报以下错误,可参照下面的方法进行排查
首先确保,root用户允许远程连接(%) ,如下图:
其次,登录阿里云控制台看是否开放3306端口号
在添加该端口开放后,我的navicat终于可以远程上数据库了