ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

记一次CentOS中安装 MariaDB 10.6.8 的踩坑经历

2022-06-11 05:00:07  阅读:364  来源: 互联网

标签:MariaDB CentOS 10.6 -- server cnf mysql mariadb


1 背景

新购了一个工业微型计算机,无风扇、可7*24h运行的那种,于是打算装个linux,做一下科研工作。本身也是初学linux,以前用虚拟机跑过CentOS,也经过比选,据说稳定,最终操作系统还是选它。考虑要尽快上手,本身对MySQL比较熟悉,但目前来看,MySQL在Oracle下有闭源的可能性,就选了MariaDB。CentOS 7.9 默认MariaDB yum 源版本较低(5.x),故打算从修改 yum 源开始。

操作系统:CentOS 7.9

数据库:MariaDB 10.6.8

2 yum安装MariaDB 10.6.8

2.1 添加MariaDB yum 源

CentOS 7.9 默认yum安装的版本如下。

$ yum info mariadb      
Loaded plugins: fastestmirror, product-id, search-disabled-repos, subscription-manager

This system is not registered with an entitlement server. You can use subscription-manager to register.

Loading mirror speeds from cached hostfile
Available Packages
Name       : mariadb
Arch       : x86_64
Epoch       : 1
Version     : 5.5.68
Release     : 1.el7
Size       : 8.8 M
Repo       : base/7/x86_64
Summary     : A community developed branch of MySQL
URL         : http://mariadb.org
License     : GPLv2 with exceptions and LGPLv2 and BSD
Description : MariaDB is a community developed branch of MySQL.
          : MariaDB is a multi-user, multi-threaded SQL database server.
          : It is a client/server implementation consisting of a server daemon (mysqld)
          : and many different client programs and libraries. The base package
          : contains the standard MariaDB/MySQL client programs and generic MySQL files

 

因为系统默认从阿里的yum源下载,没有提供较新的版本,此处需要手动添加源。

vim /etc/yum.repos.d/MariaDB.repo

[mariadb]

name = MariaDB

# URL可替换为想用的版本的URL
baseurl = http://yum.mariadb.org/10.6.8/centos7-amd64/

gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB

gpgcheck=1

版本URL可在此处找:http://yum.mariadb.org

重新构建缓存。

yum clean all
yum makecache

2.2 卸载旧版

systemctl stop mariadb // 或者直接ps找出来kill掉

yum remove mariadb-server mariadb mariadb-libs

yum clean all

找出并删除残留目录。

$ find / -name mariadb     
$ find / -name mysql 

2.3 安装新版及启动数据库

yum install MariaDB-server

查看状态:

$ systemctl status mariadb
● mariadb.service - MariaDB 10.6.8 database server
  Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/mariadb.service.d
          └─migrated-from-my.cnf-settings.conf
  Active: inactive (dead)
    Docs: man:mariadbd(8)
          https://mariadb.com/kb/en/library/systemd/

此时说明已经安装成功,直接启动。

$ systemctl start mariadb

再次查看状态:

$ systemctl status mariadb
● mariadb.service - MariaDB 10.6.8 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: active (running) since Fri 2022-06-10 10:15:34 CST; 3s ago
     Docs: man:mariadbd(8)
           https://mariadb.com/kb/en/library/systemd/
  Process: 22045 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
  Process: 22019 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited, status=0/SUCCESS)
  Process: 22017 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
 Main PID: 22031 (mariadbd)
   Status: "Taking your SQL requests now..."
    Tasks: 13
   Memory: 56.5M
   CGroup: /system.slice/mariadb.service
           └─22031 /usr/sbin/mariadbd

说明启动成功。

2.4 特别说明

MariaDB 10.6.8中(包括之前几个版本,至少是10.4.12之后的版本),user 已经不是 mysql 数据库下的表,而是一个视图,故无法直接修改。如下图所示。

 

 

 主要mysql中还有两个存储过程,作者表示理解不能。关于user的设置方法参考官网手册:

https://mariadb.com/kb/en/create-user/

https://mariadb.com/kb/en/set-password/

详细设置方法将在下一章介绍。

3 修改MariaDB数据存放路径

3.1 背景

因为所购工控计算机包括一个256GB的SSD,以及一个1TB的2.5英寸机械硬盘,打算将数据默认存放路径设在机械硬盘中。机器上的linux采用LVM(Logical Volume Manager)进行的分区管理,机械硬盘中有500GB挂载至 /opt,具体如下。

[root@192 ~]# lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0 238.5G  0 disk 
├─sda1            8:1    0     1G  0 part /boot
└─sda2            8:2    0 207.8G  0 part 
  ├─centos-root 253:0    0   150G  0 lvm  /
  ├─centos-swap 253:1    0   7.8G  0 lvm  [SWAP]
  └─centos-var  253:2    0    50G  0 lvm  /var
sdb               8:16   0 931.5G  0 disk 
└─sdb1            8:17   0 931.5G  0 part 
  └─centos-opt  253:3    0   500G  0 lvm  /opt

考虑以后数据增加,故希望将数据存储位置修改至 /opt 下。

3.2 查看MariaDB数据当前存储位置

[root@192 ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.6.8-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> select @@datadir;+-----------------+
| @@datadir       |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.000 sec)

(注意,此时执行 mysql 并未要求输入用户名和密码)。通过上述查询结果可知,数据存储位置在 /var/lib/mysql 目录下。

3.3 关闭连接MariaDB的相关程序

这是为了避免正在连接MariaDB的程序因连接中断而报错。

3.4 在期望位置创建数据存放目录(datadir)

mkdir /opt/data
mkdir /opt/data/mysql
chown -R mysql:mysql /opt/data/mysql

3.5 关闭mariadb服务

systemctl stop mariadb

3.6 复制目录文件至新目录

cp -Rp /var/lib/mysql/* /opt/data/mysql

3.7 修改MariaDB的config文件

默认情况下,mysql的config信息在 /etc/my.cnf 中,为了确认 MariaDB 的config信息未发生变化,先查询该文件。

[root@192 ~]# find / -name my.*
/etc/my.cnf
/etc/my.cnf.d

结果显示相较于mysql还是有变化,下面我们来看 /etc/my.cnf 中的内容。

#
# This group is read both by the client and the server
# use it for options that affect everything
#
[client-server]

#
# include *.cnf from the config directory
#
!includedir /etc/my.cnf.d

此处需添加一部分内容,如下。(此处若不添加,服务器外客户端将无法访问数据库)

#
# This group is read both by the client and the server
# use it for options that affect everything
#
[client-server]
port=3306
socket = /opt/data/mysql/mysql.sock
# # include *.cnf from the config directory # !includedir /etc/my.cnf.d

另外,最后一行代码

!includedir /etc/my.cnf.d

表示包含 /etc/my.cnf.d 目录下的所有 *.cnf 文件。我们来看下 /etc/my.cnf.d 目录下包括哪些文件。

ls /etc/my.cnf.d/
enable_encryption.preset  mysql-clients.cnf  server.cnf  spider.cnf

其中有三个配置文件:mysql-clients.cnf、server.cnf、spider.cnf,其中 mysql-clients.cnf 用于配置客户端,我们不用管它,spider.cnf 也不相关,此目录下仅需要在 server.cnf 文件中配置:

server.cnf

#
# These groups are read by MariaDB server.
# Use it for options that only the server (but not clients) should see
#
# See the examples of server my.cnf files in /usr/share/mysql/
#

# this is read by the standalone daemon and embedded servers
[server]

# this is only for the mysqld standalone daemon
[mysqld]
datadir =/opt/data/mysql
socket = /opt/data/mysql/mysql.sock

......

3.8 开启数据库服务

systemctl start mariadb

3.9 验证

MariaDB [(none)]> select @@datadir;
+------------------+
| @@datadir        |
+------------------+
| /opt/data/mysql/ |
+------------------+
1 row in set (0.000 sec)

修改成功。

4 MariaDB设置用户及密码(解决无密码即登录问题)

前文所述 MariaDB v10.6.8 安装好之后不输入用户名和密码就能进入数据库查询,本章将示范如何完善密码设置。

4.1 查看当前认证状态并修改

select user, host, plugin from mysql.user;

若 root 显示为 unix_socket (系统认出是root直接认证)就需要修改模式,按照官网说明(https://mariadb.com/kb/en/authentication-plugin-unix-socket/)即可。

alter user root@localhost identified via mysql_native_password;

修改后再查询,状态如下。

MariaDB [mysql]> SELECT USER, host, PLUGIN FROM user;
+-------------+-----------+-----------------------+
| User        | Host      | plugin                |
+-------------+-----------+-----------------------+
| mariadb.sys | localhost | mysql_native_password |
| root        | localhost | mysql_native_password |
| mysql       | localhost | mysql_native_password |
+-------------+-----------+-----------------------+
3 rows in set (0.003 sec)

修改成功后发现还是可以通过 mysql 或 mysql -u root 命令直接进入。此时需要重新设置密码。即使从 mysql_native_password 模式变为 mysql_native_passoword 模式,也需要设置

4.2 重设密码

ALTER USER `root`@`localhost` IDENTIFIED BY 'yourpassword';

此时再尝试,如下图,则说明密码设置成功。

[root@192 ~]# mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

5 外部访问数据库

若此时从外部通过客户端工具访问数据库,会出现连不上的情况。

Error “cannot connect to mysql server (10060)”

可能有多个原因(Error “cannot connect to mysql server (10060)” – Here’s how to fix it),笔者遇到的是其中两个原因:1)未在mysql.user视图中添加`root`@`%`用户域;2)未将3306端口列入服务器防火墙白名单。

5.1 在mysql.user视图中添加`root`@`%`用户域

GRANT ALL PRIVILEGES ON *.* TO `root`@`%` IDENTIFIED BY 'yourpassword' WITH GRANT OPTION;
MariaDB [mysql]> SELECT USER, host, PLUGIN FROM user;
+-------------+-----------+-----------------------+
| User        | Host      | plugin                |
+-------------+-----------+-----------------------+
| mariadb.sys | localhost | mysql_native_password |
| root        | localhost | mysql_native_password |
| mysql       | localhost | mysql_native_password |
| root        | %         | mysql_native_password |
+-------------+-----------+-----------------------+
4 rows in set (0.003 sec)

5.2 将3306端口列入服务器防火墙白名单

首先查看防火墙状态,如下图,表示开启。

systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri ...... CST; 23h ago
     Docs: man:firewalld(1)
 Main PID: 809 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─809 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid

# 查看白名单列表
firewall-cmd --zone=public --list-ports
#此处无3306/tcp
# 添加白名单端口 firewall-cmd --zone=public --add-port=3306/tcp --permanent # 重启防火墙 firewall-cmd --reload # 查看白名单列表 firewall-cmd --zone=public --list-ports
#表示3306端口已加入白名单
3306/tcp

关于防火墙的其它命令:

# 查看防火墙状态,是否是running
firewall-cmd --state

# 重新载入配置,比如添加规则之后,需要执行此命令                       
firewall-cmd --reload

# 列出支持的zone
firewall-cmd --get-zones

# 列出支持的服务,在列表中的服务是放行的
firewall-cmd --get-services

# 查看已开放的端口
firewall-cmd --zone=public --list-ports

# 永久添加80端口
firewall-cmd --add-port=3306/tcp --permanent

# 永久添加80端口
firewall-cmd --remove-port=3306/tcp --permanent 

命令说明:

# 作用域
--zone

# 添加端口
--add-port=3306/tcp

# 永久生效,没有此参数重启后失效
--permanent

 

参考文献:

[1]  CentOS安装新版本MariaDB

[2]  CentOS7下更改、移动mysql数据存储的位置(mariaDB适用)

[3]  解决MariaDB无密码可登录

[4]  Error “cannot connect to mysql server (10060)” – Here’s how to fix it

[5]  CentOS 7 端口白名单设置

标签:MariaDB,CentOS,10.6,--,server,cnf,mysql,mariadb
来源: https://www.cnblogs.com/xunzhiyou/p/16365158.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有