服务器linux-CentOS7.*系统下使用mysql.*.tar.gz包安装mysql数据库详解

1、为什么不使用docker安装?

的确我前的确是用docker安装的, 但是发生了一次事故, 我们开发环境的服务器的磁盘满了, 有新同学在不知情的情况下再清理磁盘的时候,把mysql容器的镜像和数据文件想当然直接给清理掉了,导致mysql废掉,同时数据都丢了, 还好所有的数据库在公共数据管理仓库都有备份, 不然就完蛋了, 于是专门搞了两台服务器做数据库服务器, 本来打算还是用docker安装的, 想着这种事故还是有发生的概率,于是就放弃了这种想法,还是直接在服务器上面安装吧,开整。
有大神就这个话题也讨论过,我觉得挺有道理的,大家有兴趣可以看看为什么不建议在 Docker 中跑 MySQL?
之前我也觉得无所谓,直到问题出现在我身上。。
这里把docker安装mysql的方式附上, 供需要的小伙伴使用:
注意这里需要先安装docker服务

docker run -d --name mysql5.7 -v /usr/local/mysql57/data:/var/lib/mysql57 -v /usr/local/mysql57/conf:/etc/mysql57/conf.d -v /usr/local/mysql57/logs:/var/log/mysql57/ -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:5.7.36

2、环境清理

先卸载安装CeontOS系统默认安装的mariadb数据库

`rpm -qa | grep mariadb`
sudo rpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodeps
`find / -name mysql`

把找到的所有和mysql有关的目录都删除掉

rm -r /etc/my.cnf

安装mysql数据库需要的依赖

yum install -y ncurses-devel libaio-devel gcc gcc-c++ numactl libaio glibc cmake autoconf

3、下载并安装MySQL

3.1 下载安装包

我这里专门创建了一个文件夹用来放置下载的压缩包

mkdir -p /opt/packages | cd /opt/packages

我这里下载的是mysql5.7的最后一个版本5.7.36,当然你也可以选择其他的版本,甚至mysql8都可以,在/opt/packages目录下执行

wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz

如果没有wget命令, 使用以下命令进行安装

yum install -y wget

3.2 解压安装包

在压缩包所在目录/opt/packages下解压

tar -zxf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz

3.3 重命名并移动解压包到指定目录

重命名文件并移动文件

mv mysql-5.7.36-linux-glibc2.12-x86_64 mysql | mv mysql /usr/local/
3.4 创建mysql数据及日志存放目录
cd /usr/local/mysql | mkdir data log var tmp	
3.5 创建mysql用户和用户组

该用户主要用来进行mysql数据库管理

useradd mysql -r -M -s /sbin/nologin
3.6 修改mysql目录的用户权限
chown -R mysql:mysql /usr/local/mysql
3.7 设置mysql系统环境变量
vim ~/.bash_progfile

修改内容如下:

MYSQL_HOME=/usr/local/mysql
PATH=$PATH:$MYSQL_HOME/bin;
export PATH

wq!保存退出,执行一下命令让修改立即生效

source ~/.bash_profile
3.8 设置my.cnf文件

创建配置文件

mkdir -p /etc/mysql/ | cd /etc/mysql | vim my.cnf

文件内容如下:

[mysqld]
# 包含的配置文件 ,把用户名,密码文件单独存放
# !include /usr/local/mysql/etc/mysqld.cnf 
port = 3306

bind-address = 0.0.0.0

# 表示是本机的序号为1,唯一
server-id = 1

socket = /usr/local/mysql/tmp/mysql.sock

pid-file = /usr/local/mysql/var/mysql.pid

basedir = /usr/local/mysql/

datadir = /usr/local/mysql/data/

# 将警告打印输出到错误 log 文件.如果你对于MySQL有任何问题,你应该打开警告 log 并且仔细审查错误日志,查出可能的原因.
log_error_verbosity = 1

# 错误日志路径
log_error = /usr/local/mysql/log/error.log

#*** default settings 相关选项 ***#
# 当创建新表时作为默认使用的表类型,如果在创建表示没有特别执行表类型,将会使用此值
# default_table_type = InnoDB

#服务器时区
default_time_zone = system

#server 级别字符集
character_set_server = utf8


# 此目录被 MySQL用来保存临时文件.
# 例如,它被用来处理基于磁盘的大型排序,和内部排序一样,以及简单的临时表.
# 如果你不创建非常大的临时文件,将其放置到 swapfs/tmpfs 文件系统上也许比较好。
# 另一种选择是你也可以将其放置在独立的磁盘上.你可以使用”;”来放置多个路径,他们会按照 roud-robin 方法被轮询使用.
tmpdir = /usr/local/mysql/tmp/


#*** skip options 相关选项 ***#

# 禁止 MySQL 对外部连接进行 DNS 解析,使用这一选项可以消除 MySQL 进行 DNS 解析的时间。
# 但需要注意,如果开启该选项,则所有远程主机连接授权都要使用 IP 地址方式,否则 MySQL 将无法正常处理连接请求!
skip_name_resolve

# 把SYSDATE 函数编程为 NOW的别名
# sysdate-is-now = 1


#*** 系统资源相关选项 ***#

# 对于 Linux 系统推荐设置为小于512的整数。如果系统在一个短时间内有很多连接,则需要增大该参数的值
# back_log = 50

# 指定MySQL允许的最大连接进程数。如果在访问数据库时经常出现"Too Many Connections"的错误提 示,则需要增大该参数值。
max_connections = 1000

# 如果某个用户发起的连接 error 超过该数值,则该用户的下次连接将被阻塞,
# 直到管理员执行 flush hosts命令或者服务重启,防止黑客 ,非法的密码以及其他在链接时的错误会增加此值
max_connect_errors = 10000

# MySQL打开的文件描述符限制,默认最小1024
# 当open_files_limit没有被配置的时候,比较max_connections*5和ulimit-n的值,哪个大用哪个
# 当open_file_limit被配置的时候,比较open_files_limit和max_connections*5的值,哪个大用哪个。
open_files_limit = 10240

# 连接超时之前的最大秒数,在 Linux 平台上,该超时也用作等待服务器首次回应的时间
connect_timeout = 10

# 等待关闭连接的时间
wait_timeout = 28800

# 如果某个通信端口的读操作中断了,最大允许重试次数
net_retry_count = 10

wq!保存退出

3.9 mysql初始化
mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --initialize

执行成功之后,可以到/usr/local/mysql/log下面去看看数据库初始化生成的随机密码,把这个密码先记下来

cat  /usr/local/mysql/log/error.log

在这里插入图片描述
启动mysql.srever

cd /usr/local/mysql/support-files | ./mysql.server start

如果启动成功,查看mysql进程如下图:

ps -ef |grep mysql

在这里插入图片描述
这里登录一下数据库, 密码使用之前保存的初始化生成的随机密码,看看有没有问题

mysql -uroot -p

有问题, 连接不上,为什么?
在这里插入图片描述
因为我自定义设置了mysql.sock文件的保存目录, 怎么办,很简单, 把自定义目录跟这个临时目录的mysql.sick文件做个软链接即可

ln -s /usr/local/mysql/tmp/mysql.sock /tmp/mysql.sock

再次登录就没问题, 一操作,提示让修改密码,很简单,执行一下下面两条命令就可以了

# 修改密码
alter user 'root'@'localhost' identified by 'root';
# 刷新权限
flush privileges;

将mysql服务端的可执行文件拷贝到系统启动初始化目录下

cp mysql.server /etc/init.d/mysqld

之后就可以通过service命令进行服务管理了

service mysqld start
 
service mysqld stop

service mysqld restart

4、设置MySQL开机自启

因为我这里使用的是CentOS7.9的版本, 所有的开机自启的任务都是通过systtemctl命令来管理的, 这里说说怎么将自行安装的mysql使用systtemctl来管理,从而实现开机自启。
systtemctl命令实现开机自启都是通过/usr/lib/systemd/system的*.service文件来实现的, 所以我们这里需要自定义mysqld.service文件

vim /usr/lib/systemd/system/mysqld.service

mysqld.service的具体内容如下

[Unit]
Description=MySQL Server
After=network.target
After=syslog.target
[Service]
User=mysql
Group=mysql
Type=forking
PermissionsStartOnly=true
ExecStart= /etc/init.d/mysqld start
ExecStop= /etc/init.d/mysqld stop
ExecReload= /etc/init.d/mysqld restart
LimitNOFILE = 5000
[Install]
WantedBy=multi-user.target

wq!保存退出

重载一下systemctl的配置,因为新增了mysqld.service

systemctl daemon-reload

之后只需要将mysqld.service 使用systemctl命令加入开机自启就可以了,

systemctl enable mysqld.service

之后既可以使用systemctl来管理我们的mysql服务了,同时mysql服务也是随服务器开机自启动的

systemctl start mysqld
 
systemctl status mysqld

systemctl stop mysqld

systemctl restart mysqld

你可能感兴趣的:(操作系统,数据库,知识积累,linux,mysql)