目录
二、通用二进制格式安装mariaDB过程(含逻辑卷创建过程)
我的环境:VM中的三台CentOS 7虚拟机。
实验内容:centos7(192.168.137.133)进行yum源配置安装和多实例安装实验;centos7(192.168.137.131)上二进制包安装;centos7(192.168.137.134)上源码安装。
准备文件:mariadb.com官网下载 mariadb-10.5.4-linux-systemd-x86_64.tar.gz 和 mariadb-10.5.4.tar.gz。
一,官方yum源格式安装过程
注意:虽然yum源安装方便,但是一般生产中不用这种方法,除非是测试时。
实验:centos7(192.168.137.133)上yum源配置安装。
1)检查环境
systemctl status firewalld # 或iptables,防火墙确保关闭
getenforce # SELinux确保关闭
rpm -q mariadb-server
mariadb-server-5.5.65-1.el7.x86_64
rpm -q mariadb
mariadb-5.5.65-1.el7.x86_64
# 我之前用本地源安装的mariadb,用下面代码完整卸载掉。
yum history
yum history undo 37
rpm -q mariadb
rpm -q MariaDB-server # 注意,mariadb官方源提供下载安装的,该大写的要大写才能管用,而yum本地源安装的mariadb即可检查
2)配置方法:MariaDB官网查看yum源配置方法,编辑我的配置文件 /etc/yum.repos.d/base.repo,根据官网提示,向该文件添加如下内容:
# MariaDB 10.5 [Stable] CentOS repository list - created 2020-08-02 03:56 UTC
# https://mariadb.org/download-test/
[mariadb]
name = MariaDB
baseurl = https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/10.5/centos7-amd64
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
3)安装
yum repolist # 我更新后显示有88个
yum install -y mariadb-server
systemctl start mariadb
mysql # 成功登入
systemctl stop mariadb
systemctl start mysqld
mysql # 成功登入
systemctl stop mysqld
4)安全防护
which mysql_secure_installation
mysql_secure_installation # 看自己需求,我的回答是 enter, y, y, y, n, y, y,设置密码完成。
rpm -ql MariaDB-server # 用官方提供的yum源,注意该大写的必须大写
有一点注意的是,mysql_secure_installation安全防护后,mysql 还是可以直接进入,因为我是在centos的root账户下操作,切换成wang用户后,mysql命令进入就不管用了,这和我用yum源安装的mariadb5.5版本还是不一样的,5.5版本执行mysql_secure_installation后mysql命令即使是root身份下也是登陆不进去的,必须 mysql -uroot -p才可以。
5)其他
ls /var/lib/mysql # yum源安装的默认数据库路径
# 数据库路径修改为/data/mysqldb:
cat /etc/my.cnf # 安装指示cd /etc/my.cnf.d
vim /etc/my.cnf.d/server.cnf
[mysqld]
datadir=/data/mysqldb
# 修改数据库路径所属组所有者
mkdir /data/mysqldb
chown mysql.mysql /data/mysqldb
mysql_install_db --datadir=/data/mysqldb --user=mysql # 数据库生成,可以在/data/mysqldb中查看
# 测试数据库是否成功配置生效:
ls /data/mysqldb/
systemctl restart mariadb
ls /data/mysqldb/
mysql
mysql> create database db1;
mysql> \! ls /data/mysqldb
二、通用二进制格式安装mariaDB过程(含逻辑卷创建过程)
实验:centos7(192.168.137.131)上二进制安装 mariadb-10.5.4-linux-systemd-x86_64.tar.gz
二进制格式安装一般在生产中比较常用。
1)检查环境
同章节一本步骤。
2)上传 解压缩二进制包并解压缩文件创建软链接 && 创建mysql用户并修改解压缩文件的执行权限 && 添加./mysql/bin目录到系统PATH
getent passwd mysql # 确认mysql用户名是否存在,不存在则执行下行
useradd -r -d /data/mysqldb -s /sbin/nologin mysql # 创建mysql用户,数据文件路径/data/mysqldb
getent passwd mysql # mysql:x:983:977::/data/mysqldb:/sbin/nologin
rz # 上传 mariadb-10.5.4-linux-systemd-x86_64.tar.gz 至本机
# 直接下载.tar.gz
# wget https://mirrors.tuna.tsinghua.edu.cn/mariadb//mariadb-10.5.4/bintar-linux-systemd-x86_64/mariadb-10.5.4-linux-systemd-x86_64.tar.gz
ls
tar -xvf mariadb-10.5.4-linux-systemd-x86_64.tar.gz -C /usr/local/ # 解压缩到/usr/local
cd /usr/local
ln -s mariadb-10.5.4-linux-systemd-x86_64/ mysql # 创建解压缩文件的软链接
chown -R root: mysql/ # 修改软链接文件的所属组所有者
echo PATH=/usr/local/mysql/bin:$PATH > /etc/profile.d/mysql.sh # 添加/mysql/bin目录文件到PATH路径
. /etc/profile.d/mysql.sh # 生效配置文件
echo $PATH
3)创建逻辑卷,用于存放数据库。创建&设置mysql家目录:/data/mysqldb
fdisk -l # 查看目前硬盘,只有一个200G的。
# VM中加一块硬盘(SCSI(S)--200GB--将虚拟磁盘存储为单个文件),用于创建逻辑分区。
lsblk
echo '- - -' > /sys/class/scsi_host/host0/scan # scan disk
lsblk # 发现多了200G的sdb硬盘
# 并不打算对该硬盘分区,直接把整个硬盘作为逻辑卷管理使用。
pvcreate /dev/sdb # 物理卷
pvdisplay
vgcreate vg0 /dev/sdb # 创建卷组vg0,物理卷加入到卷组
lvcreate -n lv_mysql -l 100%FREE vg0 # 创建逻辑卷lv_mysql,用光卷组vg0
lvs # 查看逻辑卷
mkfs.xfs /dev/vg0/lv_mysql # 创建文件系统=格式化
blkid # 新增加的文件系统列表
# 逻辑卷挂载到一个目录
getent passwd mysql # 查看之前设置mysql的家目录:/data/mysqldb
vim /etc/fstab # [:r!blkid /dev/vg0/lv_mysql查UUID]
UUID="750dbbb2-28fe-4cc0-92ed-bf9c8084fbdd" /data/ xfs defaults 0 0
mount -a # 挂载生效
df -h # 查看是否挂载成功
# 创建&设置mysql家目录
mkdir /data/mysqldb # 创建之前设置mysql的家目录
ll -d /data/mysqldb # drwxr-xr-x 2 root root 6 Aug 2 14:10 /data/mysqldb
chown mysql.mysql /data/mysqldb # 修改该家目录的所有者所属组
ll -d /data/mysqldb # drwxr-xr-x 2 mysql mysql 6 Aug 2 14:10 /data/mysqldb
chmod 770 /data/mysqldb # 修改权限
ll -d /data/mysqldb # drwxrwx--- 2 mysql mysql 6 Aug 2 14:10 /data/mysqldb
6)生成或安装数据库文件
cd /usr/local/mysql/
# /usr/local/mysql目录下运行下面命令,在/data/mysqldb中生成数据库,用户是mysql:
scripts/mysql_install_db --datadir=/data/mysqldb --user=mysql
# 或 scripts/mariadb-install-db --datadir=/data/mysqldb --user=mysql
ll /data/mysqldb/
7)启动数据库前的文件配置
cp -a /etc/my.cnf /etc/my.cnf.bak # 备份习惯要有
vim /etc/my.cnf
## [mysqld]中添加(或修改)以下内容
[mysqld]
port = 3306
datadir=/data/mysqldb
socket=/tmp/mysql.sock
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
[client]
port = 3306
socket = /tmp/mysql.sock
# 创建 /tmp/mysql.sock 软链接
# my.cnf 中socket=/data/mysqldb/mysql.sock时,需要执行下面命令,不要问为什么,多次试验后就是需要在tmp中获取mysql.sock
ln -s /data/mysqldb/mysql.sock /tmp/mysql.sock
8) 启动服务文件 & 启动服务
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --list
chkconfig --add mysqld
chkconfig --list
systemctl start mysqld # 老版本,service mysqld start
9)安全防护:
which mysql_secure_installation
mysql_secure_installation
mysql
三、源码编译安装mariaDB过程
实验:centos7(192.168.137.134)上源码安装 mariadb-10.5.4.tar.gz
1)检查环境
同章节一本步骤。
2)yum安装编译过程需要用到的包
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
提示:如果出错,执行rm- f CMakeCache.txt
确认mysql用户名是否存在(getent passwd mysql ),不存在则准备用户账号(useradd -r -s /sbin/nologin mysql )。
3)源码编译与安装
rz
ls
tar xvf mariadb-10.5.4.tar.gz
mkdir -pv /data/mysqldb
# 编译
cd
cd mariadb-10.5.4/
cmake . \
-DCMAKE_INSTALL_PREFIX=/app/mysql \
-DMYSQL_DATADIR=/data/mysqldb/ \
-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_LIBWARP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_UNIX_ADDR=/app/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
# 加2个CPU到4,加快make过程
make -j 4 && make install
4)生成数据库文件
cd /usr/local/mysql/
# /usr/local/mysql目录下运行下面命令,在/data/mysqldb中生成数据库,用户是mysql:
scripts/mysql_install_db --datadir=/data/mysqldb/ --user=mysql --basedir=/app/mysql
ll /data/mysqldb/
5)启动数据库前的文件配置
cp -a /etc/my.cnf /etc/my.cnf.bak
vim /etc/my.cnf
## [mysqld]中添加(或修改)以下内容
[mysqld]
port = 3306
datadir=/data/mysqldb
socket=/app/mysql/mysql.sock
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
[client]
port = 3306
socket = /app/mysql/mysql.sock
default-character-set = utf8
# 创建 /tmp/mysql.sock 软链接
# my.cnf 中socket=/app/mysql/mysql.sock时,需要执行下面命令:
ln -s /data/mysqldb/mysql.sock /tmp/mysql.sock
6)服务启动文件
cp /app/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --list
chkconfig --add mysqld
chkconfig --list
systemctl start mysqld # service mysqld start
# failed 可能因为mysql.sock所在的/app/mysql/没有写权限
setfacl -R -m u:mysql:rwx /app/mysql/
systemctl start mysqld # service mysqld start = OK
mysql
mysql> show variables like "%basedir%" # basedir | /app/mysq
7)安全防护
方法同上几章。
四、多实例安装mariaDB,以yum源安装为例
实验:centos7(192.168.137.133)上多实例安装
1)本实验基于第一章基础上进行:实验:centos7(192.168.137.133)上yum源配置安装。该实验的数据库配置在/data/mysqldb中,而一般默认安装在/var/lib/mysql中。撤销第一章步骤5的配置方法,使数据文件暂时默认在/var/lib/mysql中。
vim /etc/my.cnf.d/server.cnf # 注释掉原始配置,删除/data/mysqldb,避免配置冲突
[mysqld]
# datadir=/data/mysqldb # 添加存放数据库目录,默认/var/lib/mysql。
rpm -ql MariaDB-server | grep multi
/usr/bin/mariadbd-multi
/usr/bin/mysqld_multi # 这种方法局限性大,不能做不同版本的多实例
/usr/share/man/man1/mariadbd-multi.1.gz
/usr/share/man/man1/mysqld_multi.1.gz
/usr/share/mysql/mysqld_multi.server
2)不同端口号(不同MariaDB实例)下的日志、数据库等文件的规划路径:
mkdir /mysqldb/{3306,3307,3308}/{etc,socket,pid,log,data} -pv
tree /mysqldb/
getent passwd mysql
# mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
chown -R mysql.mysql /mysqldb/
# mysql> show variables like '%basedir%';
ll /mysqldb/
3)安装数据库文件:【mysql> show virables like '%basedir%'】
mysql_install_db --datadir=/mysqldb/3306/data --user=mysql
mysql_install_db --datadir=/mysqldb/3307/data --user=mysql
mysql_install_db --datadir=/mysqldb/3308/data --user=mysql
tree /mysqldb/
4)配置文件(三个配置文件中都注释掉!includedir /etc/my.cnf.d):
vim /mysqldb/3306/etc/my.cnf
[mysqld]
port=3306
datadir=/mysqldb/3306/data
socket=/mysqldb/3306/socket/mysql.sock
symbolic-links=0
[mysqld_safe]
log-error=/mysqldb/3306/log/mariadb.log
pid-file=/mysqldb/3306/pid/mariadb.pid
cp -a /mysqldb/3306/etc/my.cnf /mysqldb/3307/etc/my.cnf
cp -a /mysqldb/3306/etc/my.cnf /mysqldb/3308/etc/my.cnf
vim /mysqldb/3307/etc/my.cnf # 【替换:%s/3306/3307/】
vim /mysqldb/3308/etc/my.cnf # 【:%s/3306/3308/】
6)mysqld的启动脚本:3套文件配置。
(192.168.137.131)二进制包安装实验的中/etc/init.d/mysqld传入windows,依照mysqld编写如下,写完成后复制到对应版本/端口号的根下,三个脚本只有port不一样。
#!/bin/bash
port=3306
mysql_user="root"
mysql_pwd=""
cmd_path="/usr/bin"
mysql_basedir="/mysqldb"
mysql_sock="${mysql_basedir}/${port}/socket/mysql.sock"
function_start_mysql()
{
if [ ! -e "$mysql_sock" ];then
printf "Starting MySQL...\n"
${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/${port}/etc/my.cnf &> /dev/null &
else
printf "Mysql is running...\n"
exit
fi
}
function_stop_mysql()
{
if [ ! -e "$mysql_sock" ];then
printf "Mysql is stopped...\n"
exit
else
printf "Stopping MySQL...\n"
${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown
fi
}
function_restart_mysql()
{
printf "Restarting MySQL...\n"
function_stop_mysql
sleep 2
function_start_mysql
}
case $1 in
start)
function_start_mysql
;;
stop)
function_stop_mysql
;;
restart)
function_restart_mysql
;;
*)
printf "Usage: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n"
esac
cp /mysqldb/3306/mysqld /mysqldb/3307/ # 【注:替换port=3307即可】
cp /mysqldb/3306/mysqld /mysqldb/3308/ # 【注:替换port=3308即可】
# 注意给mysqld加执行权限才能启动服务。
ll /mysqldb/3308/mysqld
# -rw-r--r-- 1 root root 936 Aug 3 12:33 /mysqldb/3308/mysqld
chmod 700 /mysqldb/3308/mysqld
chmod 700 /mysqldb/3307/mysqld
chmod 700 /mysqldb/3306/mysqld
ll /mysqldb/3306/mysqld
# -rwx------ 1 root root 936 Aug 3 12:31 /mysqldb/3306/mysqld
7)启动服务
# 启动服务
/mysqldb/3306/mysqld start
/mysqldb/3307/mysqld start
/mysqldb/3308/mysqld start
# 连接3308数据库
mysql -S /mysqldb/3308/socket/mysql.sock
mysql> \s # [可以看到是3308端口开启]
mysql> show variables like '%port%';
# 口令设置:
mysql> select user,host,password from mysql.user; # 查看空口令
mysql> update mysql.user set password=password("centos") where user='root';
# 有password给root加密。
mysql> flush privileges; # 权限生效
8)注:
修改mysqld文件可以完善连接加密机制。
参考
https://edu.aliyun.com/course/1715