目录
介绍
安装
0、删除随系统安装的mariadb
1、下载
2、解压
3、创建用户
4、创建数据目录
5、核心启动配置文件
6、安装依赖
7、初始化mysql文件
8、启动服务
9、配置环境变量
10、改root登录密码
可能遇到错误:
1) libaio.so.1 缺少
2)The designated data directory /data/mysql/ is unusable
3)Can't connect to local MySQL server through socket '/tmp/mysql.sock'
4)log-error set to '/data/mysql_log/mysql.log', however file don't exists. Create writable for user 'mysql'
5)未在my.cnf 设定的正确位置产生pid,sock等文件。
介绍
mysql 是一种RDBMS 关系型数据库管理系统 Relational Database Management System
关系型数据库将数据保存在不同的表中,而不是放在一个大仓库内,增加了速度,提高了灵活性。
.
mysql版本
5.7.x 和 8.0.x 是目前主流。2个版本有性能上差异。
一般三个月迭代一个小版本
.
安装
0、删除随系统安装的mariadb
默认linux会安装mariadb,会造成my.cnf等配置的冲突,不能读入默认的my.cnf配置文件。
当发现指定了这个配置文件启动但没有在设定的位置产生log、pid 等文件的时候就来检查下这个问题。
rpm -qa | grep mariadb #查看是否存在mariadb安装
rpm -e --nodeps mariadb-libs #卸载包。 --nodeps 不检验依赖
1、下载
去官网 https://dev.mysql.com/downloads/mysql/ 下载 Community(社区版) 的 generic(通用版) 二进制包文件。
mysql一般不用源码包编译因为时间太久。
.
看一下自己系统的C文件库是多少版本
.
2、解压
下载文件名为 mysql-8.0.33-linux-glibc2.17-x86_64-minimal.tar.xz ,需用 J 而不是 z 来解压。
tar Jxvf mysql-8.0.33-linux-glibc2.17-x86_64-minimal.tar.xz
.
做一个软链接让名字变短点。
ln -s mysql-8.0.33-linux-glibc2.17-x86_64-minimal mysql
.
3、创建用户
useradd -s /sbin/nologin mysql 创建一个无系统登录权限的mysql用户
useradd -s /sbin/nologin mysql
.
4、创建数据目录
mkdir -p /data/mysql
最好是单独在一个大的分区且是性能比较好的磁盘。数据库对磁盘读写的性能要求比较高。
.
设定数据目录的属主属组为要写入的用户名
chown -R mysql:mysql /data/mysql
.
5、核心启动配置文件
/etc/my.cnf
( 很多linux会默认自带有mariadb的配置文件,看内容可识别出来)
客户端【mysql】可配置端口和socket等,也可不配置(也可用【client】配置)。
重要的是服务端【mysqld】的配置,介绍几个最核心配置:
basedir —— 指定mysql程序路径
datadir —— 指定数据存放路径
socket —— .sock套接字文件是linux本地进程之间通信的一种方式,不熟悉mysql不建议改路径。有个细节,客户端和服务端的socket必须一致。如果只设定服务端里的socket会出问题。最后错误归结里有一个专门说这个问题的。
mysqlx_socket —— 8.0版本用于MySQL X 管理协议,端口33060。从 MySQL 8.0.14 开始,MySQL 服务器允许专门为管理连接配置 TCP/IP 端口。这为用于普通连接的网络接口上允许的单个管理连接提供了一种替代方法,即使已经建立了 max_connections 连接,但这个协议的端口不算在连接数内。但只有在启动时设置了 admin_address 系统变量以指示管理接口的 IP 地址时,该接口才可用。
pid-file —— 是记录进程启动以后会产生的一个pid
log-error —— 错误日志记录的位置
plugin_dir —— mysql中plugin插件所在的路径;
symbolic-links=0 符号连接。如果设置为1,则mysql数据库和表里的数据支持储存在datadir目录之外的路径下。默认为0
my.cnf 中的【mysql】【mysql】【mysql_safe】是启动程序配置的组名(不是说权限的组)
$basedir/bin/ 下的各个应用程序能读取不同组的配置
.
.
6、安装依赖
yum install libaio-devel
.
7、初始化mysql文件
初次运行先要让指定的数据目录/data/mysql 产生初始文件。
使用$basedir/bin/mysqld 来产生。
/usr/local/mysql/bin/mysqld --console --initialize-insecure --user=mysql
--console 让返回打印在控制台。
--initialize-insecure 产生初始化文件。 -insecure 使用空密码的方式,这样比较方便,可以登录以后再改,不然安装时候会自动随机一个密码给你。
--user 初始化使用的用户名,这样产生的文件属主属组都是这个用户的
.
--console 在启动时候的产生打印效果如下,这部分也可以在log日志中看到
.
--user = mysql 产生的效果
.
(上一步只是进行初始化,mysql 初始化结束后也并没有启动)
8、启动服务
启动服务用的是$basedir/bin/mysqld_safe
直接启动语句
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --daemonize
--daemonize 表示后台运行,相当于在最后加上 & 效果一样。
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=root &
写启动服务的脚本 mysqld.service
vi /usr/lib/systemd/system/mysqld.service
(这些启动服务模板大都具有通用性)(下面这里用mysqld,用mysqld_safe反而有问题)
[Unit]
Description=Mysql server
After=network.target
[Install]
WantedBy=multi-user.target
[Service]
Type=forking
TimeoutSec=0
PermissionsStartOnly=true
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --daemonize $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
KillMode=process
LimitNOFILE=65535
Restart=on-failure
RestartSec=10
RestartPreventExitStatus=1
PrivateTmp=false
--defaults-file= 指定启动时的配置文件。这里不指定也可以,因为mysql本身就默认会找这个文件
--daemonize 表示后台启动
ExecReload=/bin/kill -HUP -$MAINPID 杀掉进程,可以加 -s HUP 强制杀掉,下面QUIT 也可以改为 -s QUIT 强制退出。
$MAINPID 就是定义的.pid文件
.
在使用系统启动服务之前最好先直接绝对路径运行一下应用看是否能运行成功,加了 --daemonize 后台运行以后有问题不一定及时能看到。
有试过一直程序不正常后来发现根本是就没启动成功但是没报错。
通常 $basedir/support-files 下也会有 mysql.server 官方提供的模板,可以复制到上面位置替换。
编辑好启动服务文件后,因为是新配置的启动服务,因此需要重置一下系统服务
systemctl daemon-reload
.
启动服务
systemctl start mysqld
可以从ps看到记录的mysql服务启动的命令就是 mysql.service 里定义的 ExecStart 命令
.
把服务设为开机自启动
systemctl enable mysqld
设为服务后,systemctl start mysqld 可以在/var/log/mesages 里查看报错。.
.
9、配置环境变量
为了使 mysql 的命令能直接输入运行,需要加入环境变量。不然只能用绝对路径 /usr/local/mysql/bin/XXX
vi /etc/profile
把mysql的路径加进去。
source /etc/profile #重载让文件生效
10、改root登录密码
因为一开始初始化设置的是 --insecure ,现在直接 mysql -uroot 就能登录进数据库。
mysqladmin -uroot password "新密码"
修改成需要密码形式。
(改过socket的可能还会在此报错,解决办法见下面)
可能遇到错误:
1) libaio.so.1 缺少
这个错误是在初始化没装依赖 情况下会发生的。
yum provides "/*/libaio.so.1"
i686是32 位的。 x86_64是64位的。
uname -a #查看下当前系统的架构
yum install libaio-0.3.109-13.el7.x86_64 -y
2)The designated data directory /data/mysql/ is unusable
数据库存储目录没有使用权,可能是初始化过了需要remove删除过再初始化;也可能是这个文件夹的属组属主不是 --user= 设定的那个,需要chown -R 修改。
3)Can't connect to local MySQL server through socket '/tmp/mysql.sock'
修改完配置文件的 socket地址 经常会出的问题。
原因:客户端和服务端的 socket 文件必须一致,但因为经常不写客户端配置,而客户端socket默认是 /tmp/mysql.sock ,就会导致当服务端配置了其他的路径时候会发生上面报错。
把/etc/my.cnf 文件中加上客户端的配置如下,问题解决。可写成【mysql】或【client】
还有可能mysql 命令正常了,在运行 mysqladmin 或者 mysqldump 时候依然报错如下:
这时需要在 my.conf 文件上给各个应用加上.sock路径解决
socket额外资料:
mysql.sock是随每一次 mysql server启动生成的。作用于本地连接,这比指定IP连接的方式要快。本地连接通常用一个Unix域套接字文件进行,一般是/tmp/mysql.sock。
如果套接字文件被删除了,本地客户就不能连接。这可能发生在你的系统运行一个cron任务删除了 /tmp下的临时文件,可以用 chmod +t /tmp 使得文件仅能由他们的所有者或超级用户(root)删除。
4)log-error set to '/data/mysql_log/mysql.log', however file don't exists. Create writable for user 'mysql'
日志无法生成问题
5)未在my.cnf 设定的正确位置产生pid,sock等文件。
因为linux系统默认装有mariadb并占有配置文件my.cnf ,故没有做第0步的时候会产生这种情况。
至于没读到配置文件产生的位置,可以看$basedir/support/mysqld.server 文件中关于路径的描述。下面是关于用hostname做pid的解释。
待处理问题,8.0使用*/support/mysql.server 用作 /usr/lib/systemd/system/mysqld.service 运行会有错误。而自己写这个服务,pid又不会按设定的路径建立。