0、参考博客
注意赋权 mysql 文件夹的时候,进入到MySQL文件里面再执行
1、创建mysql用户
会创建MySQL 用户 和MySQL用户组
useradd -s /sbin/nologin -M mysql
cat /etc/passwd
cat /etc/group
2、解压安装包
使用如下命令解压安装包
tar -axvf mariadb-10.5.10-linux-systemd-x86_64.tar.gz
解压后的文件夹名为mysql,并移动到/user/local中
mv mariadb-10.5.10-linux-systemd-x86_64 mysql
mv mysql/ /usr/local/
最后文件会在 /user/local中
至于 为什么要移动到 /use/local 目录下,且不要加参数 ,后面的 basedir 默认就是/usr/local/mysql
--basedir=/home/mariadb-10.0.38 --datadir=/home/mariadb-10.0.38/data/
不然会报一个错误
FATAL ERROR: Could not find my_print_defaults
,这是一个bug
查看/usr/local
将MySQL这个文件所有权交给MySQL
chown -R mysql:mysql /usr/local/mysql
mysql指定路径和用户初始化
建立数据库存储目录
mkdir -p /data/maridb
将mariadb的数据存储文件所属用户改为mysql
chown -R mysql:mysql /data/maridb
先进入 mysql 目录即 /usr/local/mysql
,这个文件是我们前面改过的(其实是maridb)
# 这个是例子 我们可以配置 基础目录和 数据安装目录(数据的数据最后都是一堆文件) ./scripts/mysql_install_db --basedir=/home/mariadb-10.0.38 --datadir=/home/mariadb-10.0.38/data/ --user=mysql
# 不需要指定basedir(默认就是/usr/local/mysql)
# 如果指定的话,就会出现前面说的那个问题 `FATAL ERROR: Could not find my_print_defaults`,这是一个bug
./scripts/mysql_install_db --datadir=/data/maridb --user=mysql
如果出现
error while loading shared libraries: libaio.so.1: cannot open shared object file: No such
则安装
yum install -y libaio
配置数据库
移动配置文件
默认 /etc/my.cnf
会有这个文件,默认会从这里加载配置文件
mv /etc/my.cnf /etc/my.cnf.bak
将配置文件模板移动到/etc下(不同的版本的maridb配置模板文件不一致,比如 10.0.xx 的是my-innodb-heavy-4G.cnf,而我现在安装的是10.5.x 里面就是 wsrep.cnf ,反就是copy 一个cnf 文件而已)
#配置文件模板在mariadb包解压之后的support-files路径下
cp support-files/wsrep.cnf /etc/my.cnf
编辑配置文件
修改配置文件中的安装路径和数据路径(这两个路径就是前面提到的了)
vim /etc/my.cnf #注意是在【mysqld】标签下
basedir=/usr/local/mysql
datadir=/data/maridb
配置自启动的问题
1、 /etc/init.d 与 /etc/rc.d/init.d
我们到 /etc 目录下可以看到,/etc/init.d
是 /etc/rc.d/init.d
的一个软连接,注意主从系,/etc/rc.d/init.d 才是真实目录
所以 /etc/init.d
内容和 /etc/rc.d/init.d
都是相同的,这也是为什么我们将启动脚本copy到 /etc/rc.d/init.d
目录下,而 /etc/init.d
下面也会出现 mysql.server(而且其它内容都是一样的)
关于其它详细的可以参考文章 https://cloud.tencent.com/developer/article/1533529
2、/etc/rc0.d 等与 /etc/rc.d/rc0.d 等
在 /etc 目录下可以看到 rc0.d,rc1.d,rc1.d 的映射关系
所以对应关系如下,注意主从关系 ,/etc/rc0.d 目录是 /etc/rc.d/rc0.d 目录的软连接,所以 /etc/rc.d/rc0.d 才是真实目录
真实目录 | 关系 | 被映射的(虚拟目录) |
/etc/rc.d/rc0.d | 映射 | /etc/rc0.d |
/etc/rc.d/rc1.d | 映射 | /etc/rc1.d |
/etc/rc.d/rc2.d | 映射 | /etc/rc2.d |
关于其它详细的可以参考文章 https://cloud.tencent.com/developer/article/1533529
3、为什么要创建 /etc/init.d
和 /etc/rc0.d
… 等软连接?
直接在 /etc/rc.d/init.d ,/etc/rc.d/rc0.d 这些真实目录里面配置不就行了吗。
其实 /etc/rc.d/init.d ,/etc/rc.d/rc0.d 都是用来放服务脚本的,当Linux启动时,会寻找这些目录中的服务脚本,并根据脚本的run level确定不同的启动级别。
在制作服务脚本的过程中,使用了Linux的两个版本,CentOS和Ubuntu,就需要在两个版本中都可以开机启动服务。但Ubuntu没有 /etc/rc.d/init.d这个真实目录,所以,为了保持同一种服务在CentOS和Ubuntu使用的统一性。
将服务脚本(注:服务脚本在两个不同版本中是不同的)都放在 /etc/init.d 这个虚拟链接目录下,最终达到的效果是相同的(对于 rc0.d 也是这样的问题)。
需要说明的是:在CentOS和Ubuntu两个版本中,除了服务脚本放置的目录是相同的,服务脚本的编写及服务配置都是不同的。比如CentOS使用Chkconfig进行配置,而Ubuntu使用sysv-rc-conf进行配置。
关于其它详细的可以参考文章 https://cloud.tencent.com/developer/article/1533529
4、关于CentOS 中使用 chkconfig 命令设置自启动
注意 Ubuntu使用sysv-rc-conf 命令 进行配置。
在linux操作系统下,经常需要创建一些服务,这些服务被做成shell脚本,这些服务需要在系统启动的时候自动启动,关闭的时候自动关闭。
将需要自动启动的脚本放入 /etc/rc.d/init.d(真实目录) 目录下,然后用命令 chkconfig --add filename 将自动注册开机启动和关机关闭。
实质就是在 rc0.d-rc6.d 目录下生成一些文件连接,这些链接连接到 /etc/rc.d/init.d 目录下指定文件的shell脚本。
关于 chekconfig 可以参考
启动mariadb
- 先配置环境变量(后面直接使用 mysql 等命令)
echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
可以看到mysql/bin 已经加入到PATH里面了
- 将启动脚本移至启动路径
cp support-files/mysql.server /etc/rc.d/init.d/mysql.server
- 设置mariadb开机自启动
# 将 服务加入 开机自启动列表中
chkconfig --add mysql.server
# 设置开机自起
chkconfig mysql.server on
- 使用启动脚本启动mariadb
/etc/init.d/mysql.server start
或者
systemctl start mysql.server
- 检查是否设置成功
chkconfig --list mysql.server
出现如下内容表示成功
设置root用户密码
- 无密码登录mysql
mysql -uroot -p
- root用户授权改密码(三个都需要执行)
grant all privileges on *.* to 'root'@'%' identified by '123456';
grant all privileges on *.* to 'root'@'localhost' identified by '123456';
grant all privileges on *.* to 'root'@'127.0.0.1' identified by '123456';
flush privileges;
- 退出,使用新密码登录
mysql -uroot -p123456