Linux 下安装 MySQL-5.6.24.tar.gz
背景介绍
因为业务稳定性上面的考量,采用的安装方式是从服务器上打包,然后直接搬运到新服务器上解压使用。
在这个过程中,碰到了一些问题,本文做一些记录。
安装过程
Mysql
有一个默认的安装路径,在 mysql/support-files/mysql.server
的注释中有说明,期望的安装路径是 /usr/local/services/mysql
,如果不是安装在这个路径,就需要自己在 my.cnf
文件中进行配置。
**.tar.gz
解压之后的文件包括
# bin/ 带/表明这是一个目录
mysql/
bin/
data/
docs/
include/
lib/
man/
mysql-test/
scripts/
share/
sql-bench/
supports-file/
README
my.cnf
my.default.cnf
其中需要关注的有这么一些目录和文件
bin/ #存储相关命令
data/ #储存数据
scripts/ #初始化脚本
support-file/ #启动脚本
my.cnf #配置文件
流程:
- 做好准备,准备好用户名,用户组,依赖包
libaio
- 到想要安装的位置进行解压
- 权限设置,将安装目录以及数据存储目录的所属用户和所属变更为
mysql
- 数据库初始化,使用命令
/usr/local/mysql/scripts/mysql_install_db
(mysql
前面的路径可以自定义)- 如果
/etc/my.cnf
文件不存在,则会安装到默认路径/var/lib/mysql/
,如果存在则按照配置文件中的配置安装 mysql_install_db
脚本中有一行命令是./bin/my_print_defaults
- 如果不使用
--basedir
来指定根目录,那么执行mysql_install_db
时就要在mysql
的安装根目录下才行
- 如果不使用
- 必须带
--user=xxx
,这样才能在启动时正常生成.pid
文件,不然会报错
- 如果
- 启动
mysql server
,使用命令/usr/local/mysql/support-file/mysql.server start
- 该命令会默认
mysql
安装目录为/usr/local/services/mysql/
,如果你的安装目录不是,该命令就需要使用到/etc/my.cnf
文件,如果文件不存在会报错。第四步初始化时也可以设置--datadir
,如果设置要特别注意和my.cnf
中的保持一致 - 这个时候会需要
.pid
文件,如果在初始化中不指明--user=xxx
,这里会报错
- 该命令会默认
- 将
mysql
加入到环境变量中export PATH=$PATH:/usr/local/mysql/bin
完整的命令
/usr/local/mysql/scripts/install_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/
因为我执行命令时在 /root/ 目录下,所以加了 –basedir 来避免报错
/usr/local/mysql/support-file/mysql.server start
可能碰到的问题
权限问题
mysql
默认使用的用户和用户组都是mysql
,在linux
下需要确保mysql
用户和用户组是存在的,且涉及到mysql
读写的文件目录需要变更所属用户和所属组,这里的文件目录一般就是mysql
的安装目录以及mysql
数据存储目录顺序问题
在数据库初始化之前要配置好
my.cnf
文件,最佳实践是将安装目录下的my.cnf
复制到/etc/my.cnf
下配置文件条目
常规配置包括(其中的路径可以随意指定):[mysqld] basedir = /usr/local/mysql datadir = /data/mysql socket = mysql.sock port = 3306 pid-file = mysql.pid log-error = mysql.err
basedir
这是软件的安装路径,结合 1 中所说的权限问题,需要将/usr/local/mysql
的所属用户和所属组变更为mysql:mysql
datadir
这是数据库的数据存放地址,初始化生成的一些数据也会放置在该文件夹下pid-file
pid
文件的路径是基于datadir
的,如上,最终的 pid 文件路径会是:/data/mysql/mysql.sock
log-error
也是一样root 密码变更
一般情况下,
mysql
正常安装之后,可以使用root
进行无密码登录。有的情况下会随机生成一个密码,存放在log
文件中,在上诉的配置下,就是在/data/mysql/mysql.err
中。除了这两种情况之外,还有一种新情况,生成了root
密码但又找不到,类似于忘记了root
密码。这样的情况下,需要先停掉
mysql server
然后在特定条件--skip-grant-tables
下启动。停掉 mysql server 服务
本文因为是直接使用自己打包的
.tar.gz
来安装,所以无法借助操作系统提供的便捷管理功能,比如service
或者systemctl
。
在这样的情况下,需要使用kill
命令,手动的结束进程。ps -A|grep mysql
可以用来查找PID
,然后即可使用kill -9 PID
命令。结束进程之后,重启mysql server
,使用/usr/local/mysql/bin/mysqld_safe --skip-grant-tables &
重启服务,这个时候可以无密码进入,然后重设root
密码。将新的命令加入到环境变量中
#该命令查看当前环境变量 echo $PATH #将 mysql 加入到环境变量中 export PATH=$PATH:/usr/local/mysql/bin/
本作品采用《CC 协议》,转载必须注明作者和本文链接