①源码安装,优点是安装包比较小,只有十多M,缺点是安装依赖的库多,安装编译时间长,安装步骤复杂容易出错;
②使用官方编译好的二进制文件安装,优点是安装速度快,安装步骤简单,缺点是安装包很大,300M左右。以下介绍linux使用官方编译好的二进制包安装mysql。
到mysql官网下载mysql编译好的二进制安装包,在下载页面Select Platform:选项选择linux-generic,然后把页面拉到底部,64位系统下载Linux - Generic (glibc 2.5) (x86, 64-bit),32位系统下载Linux - Generic (glibc 2.5) (x86, 32-bit)
下载地址:https://www.mysql.com/downloads/
选择community server
点击DOWLOAD
选择版本,当前选择的5.6版本
点击下载mysql-5.6.38-linux-glibc2.12-i686.tar.gz
选择no thanks
一、CentOS7.4系统自带mariadb
# 查看系统自带的Mariadb
[root@vmtest ~]# rpm -qa|grep mariadb
mariadb-libs-5.5.44-2.el7.centos.x86_64
# 卸载系统自带的Mariadb
[root@vmtest ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7.centos.x86_64
# 删除etc目录下的my.cnf
[root@vmtest ~]# rm /etc/my.cnf
二、检查mysql是否存在
# 检查mysql是否存在
[root@VMTest ~]# rpm -qa | grep mysql
[root@VMTest ~]#
三、查看用户和组是否存在
1)检查mysql组合用户是否存在
# 检查mysql组和用户是否存在,如无则创建
[root@VMTest ~]# cat /etc/group | grep mysql
[root@VMTest ~]# cat /etc/passwd | grep mysql
# 查询全部用户(只是做记录,没必要执行)
[root@VMTest ~]# cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F ":" '{print $1 "|" $3 "1" $4}' | more
root|010
sync|510
mysql|99711001
2)若不存在,则创建mysql组和用户
# 创建mysql用户组
[root@VMTest ~]# groupadd mysql
# 创建一个用户名为mysql的用户,并加入mysql用户组
[root@VMTest ~]# useradd -g mysql mysql
# 制定password 为111111
[root@VMTest ~]# passwd mysql
Changing password for user mysql.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
四、下载mysql的tar包
https://dev.mysql.com/downloads/mysql/5.7.html#downloads
- 1
五、上传第四步下载的mysql TAR包到
# 进入/usr/local/src文件夹
[root@VMTest ~]# cd /usr/local/src/
# 上传mysql TAR包
[root@VMTest src]# rz
# 解压tar文件
[root@VMTest src]# tar xvf mysql-5.7.22-el7-x86_64.tar
# 解压mysql-5.7.22-el7-x86_64.tar.gz
[root@VMTest src]# tar -zxvf mysql-5.7.22-el7-x86_64.tar.gz
#复制解压后的mysql目录到系统的本地软件目录:
cp mysql-5.6.17-linux-glibc2.5-i686 /usr/local/mysql -r
注意:目录结尾不要加/
# 解压后的文件移动到/usr/local文件夹
[root@VMTest src]# mv mysql-5.7.22-el7-x86_64 /usr/local
# 进入/usr/local下,修改为mysql
[root@VMTest src]# cd /usr/local
[root@VMTest local]# mv mysql-5.7.22-el7-x86_64 mysql
六、更改所属的组和用户
# 更改所属的组和用户
[root@VMTest local]# chown -R mysql mysql/
[root@VMTest local]# chgrp -R mysql mysql/
[root@VMTest local]# cd mysql/
[root@VMTest mysql]# mkdir data
[root@VMTest mysql]# chown -R mysql:mysql data
七、进入mysql文件夹,并安装mysql(初始化数据库)
这一点比较坑,网上的教程大多是mysql_install_db 方式安装的,这一步也是遇到问题最最多的,折腾了好久,但是mysql_install_db 命令是不推荐的,也提示使用mysqld来安装
--initialize
用于“ 默认安全 ”安装(即包括生成随机初始root密码)。
使用 --initialize-insecure
选项,不会 root生成密码,数据目录的初始化可能会失败,因为系统中缺少一些必需的软件库。
# 进入mysql
[root@VMTest etc]# cd /usr/local/mysql/
# 安装mysql
[root@VMTest mysql]# bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
or(推荐):
[root@VMTest mysql]# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
2018-07-04 15:46:02 [WARNING] 5mysql_install_db is deprecated. Please consider switching to mysqld --initialize
2018-07-04 15:46:05 [WARNING] The bootstrap log isn't empty:
2018-07-04 15:46:05 [WARNING] 2018-07-04T15:46:02.728710Z 0 [Warning] --bootstrap is deprecated. Please consider using --initialize instead
2018-07-01T15:46:02.729161Z 0 [Warning] Changed limits: max_open_files: 1024 (requested 5000)
2018-07-04 T15:46:02.729167Z 0 [Warning] Changed limits: table_open_cache: 407 (requested 2000)
添加开机启动,把启动脚本放到开机初始化目录
[root@VMTest mysql]# cp ./support-files/mysql.server /etc/init.d/mysqld
[root@VMTest mysql]# chown 777 /etc/my.cnf
[root@VMTest mysql]# chmod +x /etc/init.d/mysqld
创建默认的SSL和RSA文件:(这里仅做记录,不必执行)
./bin/mysql_ssl_rsa_setup
八、在/etc下创建my.cnf文件
# 进入/etc文件夹下
[root@VMTest mysql]# cd /etc
# 创建my.cnf文件
[root@VMTest etc]# touch my.cnf
# 编辑my.cnf
[root@VMTest etc]# vim my.cnf
1)my.cnf添加如下内容:
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
# 设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=/usr/local/mysql
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M
2)查看my.cnf内容
# 查看my.cnf文件
[root@VMTest mysql]# cat /etc/my.cnf
九、启动mysql
# 启动mysql
[root@VMTest mysql]# /etc/init.d/mysqld start
or
[root@VMTest mysql]# ./mysqld --defaults-file=/etc/my.cnf --user=root
MySQL manager or server PID file could not be found! [FAILED]
解决:
# 1、查看进程
[root@VMTest mysql]# ps aux|grep mysql
root 10031 0.0 0.1 113264 1616 pts/0 S 14:36 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/iZ2ze3hm3gyjyjz628l7rgZ.pid
mysql 10220 0.0 19.1 1140876 195072 pts/0 Sl 14:36 0:02 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=iZ2ze3hm3gyjyjz628l7rgZ.err --pid-file=/usr/local/mysql/data/iZ2ze3hm3gyjyjz628l7rgZ.pid --port=3306
root 10421 0.0 0.0 112660 968 pts/0 R+ 15:51 0:00 grep --color=auto mysql
# 2、杀死进程
[root@VMTest mysql]# kill -9 10031
[root@VMTest mysql]# kill -9 10220
# 3、重启mysql
[root@VMTest mysql]# /etc/init.d/mysqld restart
Shutting down MySQL..
Starting MySQL.
十、设置开机启动
#设置开机启动
[root@VMTest mysql]# chkconfig --level 35 mysqld on
[root@VMTest mysql]# chkconfig --list mysqld
[root@VMTest mysql]# chmod +x /etc/rc.d/init.d/mysqld
[root@VMTest mysql]# chkconfig --add mysqld
[root@VMTest mysql]# chkconfig --list mysqld
[root@VMTest mysql]# service mysqld status
SUCCESS! MySQL running (4475)
十一、修改配置文件
# 进入/etc/profile文件夹
[root@VMTest mysql]# vim /etc/profile
1)修改/etc/profile,在最后添加如下内容
# 修改/etc/profile文件
#set mysql environment
export PATH=$PATH:/usr/local/mysql/bin
# 使文件生效
[root@VMTest mysql]# source /etc/profile
十二、获得mysql初始密码
# 1、获得mysql初始密码
[root@VMTest bin]# cat /root/.mysql_secret
# Password set for user 'root@localhost' at 2017-04-17 17:40:02
_pB*3VZl5T<6
# 2、修改密码
[root@VMTest bin]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 53
Server version: 5.7.22 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> set PASSWORD = PASSWORD('root');
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 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 host='%' where user='root';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
mysql> select host,user from user;
+-----------+---------------+
| host | user |
+-----------+---------------+
| % | root |
| localhost | mysql.session |
| localhost | mysql.sys |
+-----------+---------------+
3 rows in set (0.00 sec)
十四、重启mysql生效
# 重启mysql
[root@VMTest bin]# /etc/init.d/mysqld restart
Shutting down MySQL..
Starting MySQL.
- 1
- 2
- 3
- 4
备注:
由于安装在/usr/local下面的mysql,因此可以在任何文件夹启动mysql
若安装在别的文件夹,请执行以下命令:
# 为了在任何目录下可以登录mysql
ln -s /你的mysql路径/mysql /usr/local/mysql
- 墙
不关闭防火墙,外网不能访问
CentOS 7.0默认使用的是firewall作为防火墙
查看防火墙状态
firewall-cmd --state
- 1
停止firewall
systemctl stop firewalld.service
- 1
禁止firewall开机启动
systemctl disable firewalld.service
- 1
可能遇到的问题
重置密码遇到ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using passwor:yes)问题
一般这个错误是由密码错误引起,解决的办法自然就是重置密码。
假设我们使用的是root账户。
1.重置密码的第一步就是跳过MySQL的密码认证过程,方法如下:
vim /etc/my.cnf(注:windows下修改的是my.ini)
在[mysqld]后面任意一行添加 skip-grant-tables
用来跳过密码验证的过程,如下图所示:
保存文档并退出
2.接下来我们需要重启MySQL:
/etc/init.d/mysql restart(有些用户可能需要使用/etc/init.d/mysqld restart)
3.重启之后输入mysql即可进入mysql。
4.接下来就是用sql来修改root的密码
进入到终端当中,敲入 mysql -u root -p
命令然后回车,当需要输入密码时,直接按enter键,便可以不用密码登录到数据库当中
(5.7.11以前) > update user set password=password("123456") where user="root";
(5.7.11 或者以后)> update user set authentication_string=password("123456") where user="root";
在这儿我是用的是:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'HuaZai12345!';
mysql> flush privileges;
mysql> quit
注意:如果在执行该步骤的时候出现 ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
错误。则执行下 flush privileges
命令,再执行该命令即可。
到这里root账户就已经重置成新的密码了。
5.编辑my.cnf,去掉刚才添加的内容,然后重启MySQL。大功告成!
网上有很多关于这个问题的解决说明,很多刚接触的朋友可能比较迷惑的是在自己的平台上找不到my.cnf或者my.ini文件,如果你是Linux,使用如下方式可以搜索到
whereis my.cnf
- 1
至于windows平台,去安装目录下找一下my.ini吧。
ERROR 1133 (42000): Can’t find any matching row in the user table
1、问题描述
使用 set password for 'root'@'localhost'=password('MyNewPass4!');
命令修改mysql数据库root用户密码提示 ERROR 1133 (42000): Can't find any matching row in the user table
错误
2、主要原因
错误提示的字面意思:在用户表中找不到任何匹配的行
登录mysql执行以下命令
use mysql;
select Host,User from user;
主要原因是修改密码的条件不否
3、解决办法
将 set password for 'root'@'localhost'=password('MyNewPass4!');
代码中的 localhost
修改 %
,与数据库Host字段值一致 set password for 'root'@'%'=password('MyNewPass4!');
刷新 flush privileges;
参考:https://blog.csdn.net/justlpf/article/details/82905963
https://blog.csdn.net/weixin_38281964/article/details/82016431
https://www.cnblogs.com/code-changeworld/p/4364645.html
问题参考:https://blog.csdn.net/vv19910825/article/details/82979563
https://blog.csdn.net/hello_world_qwp/article/details/80346904
https://blog.csdn.net/github_38336924/article/details/82702017
https://blog.csdn.net/memory6364/article/details/82426052