第5节. mysql二进制和源码编译安装及多实例
二进制安装
MSI格式点击安装就好
一、创建账号以及数据库的目录
确定没有使用该账号,再创建
(1) 准备用户
groupadd -r -g 306 mysql # 没必要,删掉这句,本身useradd -r 就会创建同名组,id都是<1000的系统ID
useradd -r –d /data/mysql mysql # 没必要-d /data/mysql ,因为-r本身也不会创建家目录写了也白写
(2) 准备数据目录,建议使用逻辑卷
mkdir /data/mysql
chown mysql:mysql /data/mysql
-r系统用户了,-d就不会创建家目录了,所以没必要-d带上目录,
所以创建账号优化为
useradd -r mysql
mkdir /data/mysql
chown mysql.mysql /data/mysql
或者
useradd -r -s /sbin/nologin -m -d /data/mysql mysql # -m就是-r的情况下不会-d所以就-m
cd /data/mysql
rm -rf /data/mysql/.* # 删除家目录里的隐藏文件,否则会有问题
然后这里强调下 useradd -s /bin/false 和/sbin/nologin一个意思,不过false的本质还是
你给了用户/bin/false 的shell后,用户登入使用这个/bin/false后发现返回的是false是错误,于是就不会继续登入了。
二、解压二进制和创建软连接以及文件权限
注意/usr/local路径是固定的,当初官方编译的时候指定的
解压后就得到带版本号的文件夹,大小从600M+变成了1.5G
但是人家编译的时候的路径是/usr/local/mysql,所以创建一个软连接
权限的问题
解释:加不加斜线
1、chown -R root.root mysql # msql是软连接文件,-R也是不认为是个文件夹,不存在递归、
2、chown -R root.root mysql/ # 这样就会判定为文件夹,-R就会做递归了
这里就完成了二进制文件的解压,得到了一堆mysql程序。然后考虑使用这些二进制文件生成DB文件。
三、生成数据库文件
现在/data/mysql里是空的
关注这两个文件夹
/usr/local/msyql/scripts里的mysql_install_db是用来创建数据库文件
创建的时候要指明,在哪个目录下生成DB文件,并这些文件属于哪个用户
执行的时候报错了
解决方法是到/usr/local/mysql下使用相对路径执行
这就是安全加固的指令👆运行完后,就生成了DB文件👇
配置文件一般系统自带就有,也要看什么系统呢,如果是最小化rocky-linux就没有
可见该/etc/my.cnf文件不是二进制安装得来的。
四、从二进制安装包里找到配置文件推荐模板复制到常用配置文件路径下
这些参数就是老文件保留下来的,现在不会给这么小的内存。
和原来的/etc/my.cnf区别开来,放到/etc/mysql/my.cnf👆
修改/etc/mysql/my.cnf里的datadir为之前指定的/data/mysql,其他不用动
五、启动服务
由于是二进制安装的,启动靠脚本
脚本里有start status stop这些动作的
设置为开机启动了已经👆
然后启动服务
六、客户端连接
修改一下PATH路径,便于使用mysql命令
PATH变量写到独立的/etc/profile.d/mysql.sh里
此时就可以连接mysqld了
七、开头提到的家目录里的隐藏文件的问题
如果当初创建用户使用-m -d生成了家目录来作为DB文件路径,然后又没有删除里面的隐藏文件夹,就会遇到问题
删掉就好了
system是在mysql交互界面里调用linux系统命令👆,当然这里仅仅是演示知识点,工作中千万不要这么操作,太危险了,数据库文件都在那呢。
rm -rf .[^.]* 这是删除隐藏文件的准确方法。
八、安全加固
以上就是二进制安装方法的详情👆
源码编译安装
考虑到数据库后面可能需要扩容,所以这次使用逻辑卷。
分区
注意上图👆error 需要同步一下
创建物理卷并加入卷组
加组的时候,指定单个PE大小为16M,将来空间就是16M,16M地分出去的。
创建逻辑卷
磁盘空间用光100%free
挂载文件夹
创建文件夹,记得格式化LVM
持续挂载👆
查看确认下
修改文件夹属性
创建账号先
-------------开始源码编译------------
安装依赖包👆
yum install bison bison-devel zlib-devel libcurl-devel libarchive-devel boost- devel gcc gcc-c++ cmake ncurses-devel gnutls-devel libxml2-devel openssl- devel libevent-devel libaio-devel
解压缩源码压缩包并进行编译
编译采用cmake而不是configure预编译,记得CPU给够,否则待会make编译的时候耗时更长;
cd mariadb-10.2.18/ cmake . \
-DCMAKE_INSTALL_PREFIX=/app/mysql \ # 这个是二进制程序安装路径
-DMYSQL_DATADIR=/data/mysql/ \ # 这是数据库文件存放路径
-DSYSCONFDIR=/etc/ \
-DMYSQL_USER=mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITHOUT_MROONGA_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
make && make install
提示:如果出错,执行rm -f CMakeCache.txt
make -j 16 && make install && echo -e '\a' && date
后续安装和二进制安装一样👇
准备环境变量
echo 'PATH=/app/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh
生成数据库文件 cd /app/mysql/
scripts/mysql_install_db --datadir=/data/mysql/ --user=mysql
准备配置文件
cp /app/mysql/support-files/my-huge.cnf /etc/my.cnf
[mysqld]中添加三个选项:
datadir = /data/mysql
innodb_file_per_table = on
skip_name_resolve = on 禁止主机名解析,建议使用
准备启动脚本
cp /app/mysql/support-files/mysql.server /etc/init.d/mysqld
启动服务
chkconfig --add mysqld ;service mysqld start
记录编译安装遇到的问题
多实例mysql
其实也可以直接用docker咯,这里先不管容器的事
不管是哪种,端口号必须分开来
开始操作,使用的是yum安装的mariadb进行实验
当前单个实例的情况
1、端口一个3306,要分开
2、数据文件路径一个,要分开
数据库的路径yum安装的是这里👆,待会要做多实例,路径重新规划成三个独立的。
①创建独立的目录用来存放DB文件、bin文件、etc配置文件、log日志文件
socket就是mysql通过本地socket连接的文件。
②跑数据库生成的脚本,生成多个DB文件
就是把yum安装的/var/lib/mysql/下的文件,生成到自己创建的多个分开的路径里
yum安装就会自动生成的一个文件mysql_install_db,用它来生成DB文件
如果是二进制安装的就是在scripts路径下,注意不要进去运行,就是在外面运行。
生成动作👇
yum安装的时候自带脚本就会创建mysql用户,所以直接用就行了👆
--datadir 指定DB文件目录
tree可见 已生成了
同样另外两份生成一下:
③修改目录的权限
已经通过mysql_install_db生成指定的权限如下
整个目录都设置一下
④创建多实例的配置文件
就放到刚才定义的多实例文件夹下各个/etc下
先改一份,再复制到其他实例路径下
因为是多实例,PORT默认是3306也顺便统一都写上
上面的配置优化成变量的方式,可以吗,哈哈
修改一下各自的端口
至此 二进制文件本来共用的不用动、账号共用不用动、DB文件搞定、配置文件搞定、就剩下启动脚本了。那些socket路径、pid、log都是指定后随着服务启动会自动生成的。
⑤启动的方式,采用脚本后台启动
服务脚本是网上找,或者自己写
拖进去即可
这个脚本的路径要修改的,因为它原本是针对源码编译安装的
比如mysqld_safe和mysqld的路径当前所在👇
找不到是因为which是只在PATH路径里搜索的,招不到没事,服务起一下,ps aux可见
启动后就能看到mysqld的路径
修改的截图
至此就搞完了
3306这个文件夹下的bin下的启动脚本就有了
data下的DB文件也就是数据库也有了
etc下的配置文件也有了
log 、pid 、socket 这些自动生成的
启动程序
⑥怎么连接
指定各自的socket文件
status看下路径
3307的👇
3308👇
⑦关闭数据库
报错了👆
应为服务启动关闭的那个脚本里写了固定的口令,口令是错的
就可以啦👆
通过ss -tlnp看看是不是关掉了3308这个实例
⑧补上root的口令
记得改的时候也带上socket参数-S
改完口令,由于原来是空口令所以现在必须带密码才能登入了
把启动关闭脚本里的密码补回去👇,否则关闭服务还得输入密码。
同样修改另外两个实例的密码