非root安装mysql过程
日前要在公司内网部署一个系统,但是无奈手头没有机器,于是乎就从其他部门借了一台。寄人篱下,拿不到root,也木有sudo,观察了一下系统,似乎已经有一个root的mysql在跑了,但是为了跟root持有者那边业务隔离开,还是决定自己搭一套环境。
首先肯定没法用包管理器,得编译安装了,到mysql官网下载源码并解压
1 |
https://dev.mysql.com/downloads/mysql/ |
我现在的版本是5.7,据说5.5之后全都用cmake了
1 2 3 4 5 6 7 8 9 10 |
cmake . -DCMAKE_INSTALL_PREFIX=/home/yiz96/env/usr/mysql \ -DMYSQL_UNIX_ADDR=/home/yiz96/env/run/mysql/mysql.sock \ -DSYSCONFDIR=/home/yiz96/env/etc \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DMYSQL_DATADIR=/home/yiz96/env/usr/mysql/data \ -DMYSQL_USER=yiz96 \ -DMYSQL_TCP_PORT=3307 \ -DDOWNLOAD_BOOST=1 \ -DWITH_BOOST=boost |
稍微解释一下,这里我的用户名是yiz96,我在yiz96的根目录下放了一个文件夹env,里面放各种etc、var、log、tmp、usr之类的位置(因为非root,访问不到系统的)。在cmake参数里面我指定了socket、config、user、端口等。最后两行因为mysql依赖boost库,系统可能没有或者版本不对,使用这个参数可以在安装时自动下载boost库。
注意:
1. 先把文件夹建立好
2. 能明确指定的尽量明确指定,mysql初始的my.cnf基本都空的,全是默认配置,到时候全是权限问题。
3. 有人觉得在socket上加上port标记更好,比如mysql_3307.sock这样……但是我要告诉你,等到你想改端口或者改socket地址的话,光改my.cnf是不行的……会被写到mysqld启动脚本里面去……
然后就是安装了
1 |
make -j 48 & make install |
安装完成之后,到env/usr/mysql/bin目录下,执行初始化
1 |
./mysqld --initialize --user=yiz96 --basedir=/home/yiz96/env/usr/mysql --datadir=/home/yiz96/env/mysql/data |
这个指令可以帮助你初始化数据库文件,另外用mysql_db_install也可以,但是这个已经提示deprecated了。另外执行完这条指令之后,屏幕上会显示系统为你创建的临时密码,注意保留下来登陆用。
之后,从my.cnf拷到etc下面,就可以启动mysql了。注意一点是如果不指定–deraults-file参数,mysqld会首先去读\etc\my.cnf,其次才是prefix的位置。所以如果系统事先已经存在一个mysql实例的话,这样就会出问题。
1 |
./bin/mysqld_safe --defaults-file=.env/etc/my.cnf & |
mysqld_safe不是一个mysqld daemon,它其实只是一个脚本,间接启动mysqld,通过ps -ef就可以看出来
然后通过熟悉的方式就可以打开mysql了。
在打开mysql,修改密码的时候可能还会踩到其他坑。
比如mysql5.7跟之前比较早的版本修改密码方式不太一样了,以前可能是通过 update user set password=password('xxx') where user=root 来设置,现在只需要 set password=password('xxx') 就可以了。
另外5.7默认开启了password validator,可能会在修改密码的时候告诉你密码强度不符合要求。如果实在不需要超强密码的话,可以
1 2 |
set global validate_password_policy=0; set global validate_password_length=5; |
validate_password_policy是一个密码强度策略等级,默认是1(密码长度、组成元素)。改成0就只跟长度相关了。
然后validate_password_length可以修改要求的最短密码长度。然后再set password就随便设置了……
============================
在写这篇“回忆录”的时候,惊闻机器审批下来了……准备重新部署……