Linux CentOS 7离线安装MySQL 5.7【已验证】

https://blog.csdn.net/qq_43228581/article/details/115174122

 

下载
链接:https://pan.baidu.com/s/1nCkiD7LsAct_vHqXyFq7lQ
提取码:98j3
把安装包mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz 拷贝到 离线生产环境/usr/local目录下

安装

2.1 创建用户
为了方便数据库管理,对于安装的MySQL数据库,生产上我们都会建立一个mysql用户和mysql用户组:

# 添加mysql用户组
groupadd mysql

# 添加mysql用户
useradd -g mysql mysql -d /home/mysql

# 修改mysql用户的登陆密码
passwd mysql

yfz@2020

 

卸载:

rpm -qa | grep mariadb

rpm -e mariadb-libs-5.5.41-2.el7_0.x86_64 --nodeps



2.2 解压缩
cd /usr/local/

tar -xzvf mysql-5.7.13-linux-glibc2.5-x86_64.tar.gz

# 改名为mysql
mv mysql-5.7.13-linux-glibc2.5-x86_64 mysql

并赋予用户读写权限(此处也可以换位你的用户)

chown -R mysql:mysql mysql/


2.3 创建配置文件
vim /etc/my.cnf

复制以下内容:

[client]
port = 3306
socket = /tmp/mysql.sock

[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
#不区分大小写
lower_case_table_names = 1

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

max_connections=5000

default-time_zone = '+8:00'


2.4 初始化文件
初始化log文件,防止没有权限。
#手动编辑一下日志文件,什么也不用写,直接保存退出
cd /var/log/

vim mysqld.log

:wq 或  touch mysqld.log

chmod 777 mysqld.log
chown mysql:mysql mysqld.log

初始化pid文件,防止没有权限。
#手动编辑一下日志文件,什么也不用写,直接保存退出
cd /var/run/mysqld

touch mysqld.pid
# 给权限
chmod 777 mysqld.pid

chown -R mysql:mysql mysqld.pid

--下面这一句是为了防止启动报错添加

chmod -R 777 /var/run/mysqld/ (给mysqld文件夹以及下面的子文件或者文件夹赋予 读写可执行权限)

初始化数据库

# 初始化数据库,并指定启动mysql的用户,否则就会在启动MySQL时出现权限不足的问题
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --lc_messages_dir=/usr/local/mysql/share --lc_messages=en_US


初始化完成后,在my.cnf中配置的datadir目录(/var/log/mysqld.log)下生成一个error.log文件,里面记录了root用户的随机密码。

cat /var/log/mysqld.log
执行后记录最后一行:root@localhost: xxxxx 。 这里的xxxxx就是初始密码。后面登入数据库要用到

2.5 启动数据库
启动数据库

#源目录启动:
/usr/local/mysql/support-files/mysql.server start

-----------------------------------------------------------

首先描述下遇到的问题
重启linux系统之后 mysql 需要手动启动,

执行命令: service mysqld start

执行后就报错了:Starting MySQL. ERROR! The server quit without updating PID file (/var/run/mysqld/mysqld.pid).

解决方案:
在/var/run/mysqld/目录下 创建mysqld.pid 文件

1.cd /var/run/mysqld/

2.touch mysqld.pid

3.chmod -R 777 /var/run/mysqld/ (给mysqld文件夹以及下面的子文件或者文件夹赋予 读写可执行权限)

4.service mysqld start

执行后成功

Starting MySQL. SUCCESS!
-------------------------------------------------------------

并设置开机自启动服务:

# 复制启动脚本到资源目录
cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld

# 增加mysqld服务控制脚本执行权限
chmod +x /etc/rc.d/init.d/mysqld

# 将mysqld服务加入到系统服务
chkconfig --add mysqld

# 检查mysqld服务是否已经生效
chkconfig --list mysqld

# 切换至mysql用户,启动mysql,或者稍后下一步再启动。
service mysqld start

从此就可以使用service mysqld命令启动/停止服务:

su mysql

service mysqld start

service mysqld stop

service mysqld restart

2.6 登陆,修改密码
必须修改初始的随机密码:

# 系统默认会查找/usr/bin下的命令;建立一个链接文件。
ln -s /usr/local/mysql/bin/mysql /usr/bin

# 登陆mysql的root用户
mysql -uroot -p
# 输入上面的默认初始密码(root@localhost: xxxxx)

# 修改root用户密码为XXXXXX
set password for root@localhost=password("XXXXXX");

3 使用mysql
3.1 用户建立,远程连接

use mysql;

update user set host = '%' where user = 'root';

select host, user from user;

flush privileges;


以下命令只需要改动 用户名 和密码:

grant all privileges on *.* to '新用户名'@'%' identified by '新密码';

flush privileges;

其中通配符%表示让该用户可以从任意远程主机登陆。

如果远程访问失败:
查看防火墙状态:

systemctl status firewalld.service
绿的running表示防火墙开启

 

执行关闭命令:

systemctl stop firewalld.service

再次执行查看防火墙命令:

systemctl status firewalld.service
执行开机禁用防火墙自启命令 :

systemctl disable firewalld.service

--资料参考备注信息:

https://blog.csdn.net/qq_45060236/article/details/105357666?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.no_search_link&spm=1001.2101.3001.4242

资料参考:

在my.cnf添加如下配置

[mysqld]

sql_mode='NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT,ANSI_QUOTES'

配置文件加入相应参数[以下会讲到],重启的时候,依然差强人意,甚至给出教程的人并没有亲力亲为的去测试,就张贴了出来,还会带来新的mysql的报错,或者是完全启动报错,今天我就来详细与大家一一说明这些参数,及解决办法。

sql_mode这个变量,很容易被忽视,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。在生产环境必须将这个值设置为严格模式,所以开发、测试环境的数据库也必须要设置,这样在开发测试阶段就可以发现问题。

sql_mode常用值如下: 

ONLY_FULL_GROUP_BY:对于GROUP BY聚合操作,如果在 SELECT 中的列,没有在 GROUP BY 中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中。

NO_AUTO_VALUE_ON_ZERO:该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户 希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。

STRICT_TRANS_TABLES:在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制

NO_ZERO_IN_DATE:在严格模式下,不允许日期和月份为零

NO_ZERO_DATE:设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。

ERROR_FOR_DIVISION_BY_ZERO:在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如 果未给出该模式,那么数据被零除时MySQL返回NULL

NO_AUTO_CREATE_USER:禁止GRANT创建密码为空的用户

NO_ENGINE_SUBSTITUTION:如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常

PIPES_AS_CONCAT:将"||"视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似

ANSI_QUOTES:启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符

说明介绍完了,但是在8.0中这么设置下依然会报错,原因如下:

ERROR 1231 (42000): Variable 'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER'

8.0以上已经取消了NO_AUTO_CREATE_USER这个关键字,删掉sql语句中的这个关键字即可

最终,/etc/my.cnf 配置文件中  修改  :sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' 

重启mysql服务,大功告成!~

posted on 2021-09-17 23:05  四海骄阳  阅读(476)  评论(0编辑  收藏  举报

导航