Ubuntu编译安装MariaDB并进行初始化配置

news2024/11/19 4:15:13

Ubuntu编译安装MariaDB并进行初始化配置

  • 1. 编译安装MariaDB
  • 2. 配置MariaDB
  • 3. Docker安装MariaDB

1. 编译安装MariaDB

   MariaDB官方安装文档:https://mariadb.com/kb/en/Build_Environment_Setup_for_Linux/
   下载MariaDB源码:https://mariadb.org/mariadb/all-releases/
在这里插入图片描述
在这里插入图片描述

   查看操作系统的版本:

root@mysql-demo:~# lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04.1 LTS
Release:	20.04
Codename:	focal

   更新apt源:

root@mysql-demo:~# mv /etc/apt/sources.list /etc/apt/sources.list.bak

root@mysql-demo:~# cat /etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
 
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
 
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
 
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
 
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

   根据MariaDB官方项目文档,我们需要安装依赖:

root@newtv:~# apt-get update
root@newtv:~# apt-get install cmake build-essential openssl libssl-dev bison libncurses-dev

   解压并进入源码内:

root@newtv:~# tar xf mariadb-11.3.2.tar.gz
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \       # MariaDB的安装地址
-DMYSQL_DATADIR=/mydata/data \                          # 数据库文件存放地址
-DWITH_INNOBASE_STORAGE_ENGINE=1 \                      # 支持数据库innobase引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \                       # 支持数据库archive引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \                     # 支持数据库blackhole存储引擎
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \                     # sock文件编译后存放地址
-DDEFAULT_CHARSET=utf8 \                                # 字符集utf8
-DDEFAULT_COLLATION=utf8_general_ci \                   # 校验字符
-DENABLED_LOCAL_INFILE=1                                # 允许本地导入数据


root@newtv:~/mariadb-11.3.2# make                       # 这个过程很长,或者使用下面的方式
root@newtv:~/mariadb-11.3.2# make -j 4                  # 如果你的Linux设备是多核,可以加上-j参数以加快编译速度
root@newtv:~/mariadb-11.3.2# make install 

2. 配置MariaDB

   创建mysql用户组和用户:

root@mysql-demo:~# groupadd -r mysql
root@mysql-demo:~#  useradd -g mysql -r -s /sbin/nologin mysql

   创建SQL目录(上文编译参数内):

root@mysql-demo:~# mkdir /mydata/data -p
root@mysql-demo:~# chown mysql:mysql /mydata/data

   进入MariaDB安装地址,修改文件归属到mysql用户:

root@mysql-demo:~# cd /usr/local/mysql
# chgrp mysql ./*

   初始化脚本:
   使用MariaDB自带的脚本,对MariaDB进行初始化(当前在MariaDB安装目录内,即:/usr/local/mysql内):

root@mysql-demo:~#  /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/mydata/data

   初始化完成后,需要设置my.cnf文件,早期版本的MySQL和MariaDB都有提供my.cnf为模版,现在已经没有提供,需要手动创建,手动创建到/etc下。

root@mysql-demo:~# cat /etc/my.cnf 
# Begin /etc/mysql/my.cnf
# The following options will be passed to all MySQL clients
[client]
port            = 3306
socket          = /tmp/mysql.sock

# The MySQL serve
[mysqld]
port            = 3306
socket          = /tmp/mysql.sock
# MariaDB安装地址
basedir         = /usr/local/mysql
datadir         = /mydata/data
#skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
sort_buffer_size = 512K
net_buffer_length = 16K
myisam_sort_buffer_size = 8M
skip-name-resolve = 0

# MariaDB不监听任何IPTCP端口
# skip-networking

# required unique id between 1 and 2^32 - 1
server-id       = 1
innodb_data_file_path = ibdata1:12M:autoextend

# You can innodb_buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 32M
innodb_log_file_size = 48M
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
innodb_write_io_threads = 4
innodb_read_io_threads = 4
innodb_force_recovery =1

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[isamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout
# End /etc/my.cnf

   创建一个MariaDB服务器系统服务文件:

root@mysql-demo:~# cat /usr/lib/systemd/system/mysql.service
[Unit]
Description=MariaDB

[Service]
LimitNOFILE=10000
Type=simple
User=mysql
Group=mysql
PIDFile=/mydata/data/microServer.pid
ExecStart=/usr/local/mysql/bin/mysqld_safe --datadir=/mydata/data
ExecStop=/bin/kill -9 $MAINPID

[Install]
WantedBy=multi-user.target

   设置好后,使用systemctl进行启动即可:

root@mysql-demo:~# systemctl daemon-reload
root@mysql-demo:~# systemctl start mysql.service
root@mysql-demo:~# systemctl status mysql.service

   还要添加MariaDB安装目录下的bin目录到环境变量内,如:

root@mysql-demo:~# vim /etc/profile
export PATH=/usr/local/mysql/bin:$PATH
root@mysql-demo:~# cd /usr/local/mysql/bin
root@mysql-demo:/usr/local/mysql/bin# ./mariadb-secure-installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] n
 ... skipping.

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] n
 ... skipping.

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] n
 ... skipping.

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

   完成上述步骤后,其实MariaDB就可以使用了,但是我们需要设置账号,用来远程访问。

root@mysql-demo:/usr/local/mysql/bin# mysql -u root -p
mysql: Deprecated program name. It will be removed in a future release, use '/usr/local/mysql/bin/mariadb' instead
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 11.3.2-MariaDB Source distribution

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 user,host from mysql.user;
+-------------+-----------+
| User        | Host      |
+-------------+-----------+
| PUBLIC      |           |
| mariadb.sys | localhost |
| mysql       | localhost |
| root        | localhost |
+-------------+-----------+
4 rows in set (0.002 sec)

MariaDB [(none)]> use mysql
MariaDB [mysql]> grant all privileges on *.* to 'root'@'%' identified by 'Newtv123.com' with grant option;
MariaDB [mysql]> flush privileges;
MariaDB [mysql]> select user,host from mysql.user;
+-------------+-----------+
| User        | Host      |
+-------------+-----------+
| PUBLIC      |           |
| root        | %         |
| mariadb.sys | localhost |
| mysql       | localhost |
| root        | localhost |
+-------------+-----------+
5 rows in set (0.002 sec)

   在生产环境下访问MySQL时, 是需要申请访问权限的, 就算你知道MySQL的用户名和密码, 但是你没有权限访问MySQL的那台机器, 所以这样也是安全的, 只要运维人员把权限控制到位就可以了。

MariaDB [mysql]> CREATE USER 'mysql_test'@'%' IDENTIFIED BY 'ZorFEtc';
MariaDB [mysql]> GRANT ALL PRIVILEGES ON *.* TO 'mysql_test'@'172.26.10.%';
MariaDB [mysql]> GRANT ALL PRIVILEGES ON *.* TO 'mysql_test'@'192.168.%.%';
MariaDB [mysql]> GRANT ALL PRIVILEGES ON *.* TO 'mysql_test'@'localhost';


MariaDB [mysql]> CREATE USER 'mysql_cdh'@'%' IDENTIFIED BY 'ZoDH';
MariaDB [mysql]> GRANT ALL PRIVILEGES ON *.* TO 'mysql_cdh'@'172.26.30.%';
MariaDB [mysql]> GRANT ALL PRIVILEGES ON *.* TO 'mysql_cdh'@'192.168.%.%';
MariaDB [mysql]> GRANT ALL PRIVILEGES ON *.* TO 'mysql_cdh'@'localhost';

MariaDB [mysql]> FLUSH PRIVILEGES;
删除用户:
MariaDB [(none)]> DROP USER 'mysql_test'@'172.26.3.%';

3. Docker安装MariaDB

root@newtv:~#  docker pull mariadb
root@newtv:~#  docker run --name some-mariadb \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=babyshen@2024  \
-e MYSQL_DATABASE=mydb \
-e MYSQL_USER=myuser \
-e MYSQL_PASSWORD=mypassword  \
-v /var/lib/mysql:/var/lib/mysql  \
-d mariadb
root@newtv:~# ss -tnlp | grep 3306
LISTEN 0      4096         0.0.0.0:3306      0.0.0.0:*    users:(("docker-proxy",pid=166277,fd=4))   
LISTEN 0      4096            [::]:3306         [::]:*    users:(("docker-proxy",pid=166284,fd=4))  

   使用其他客户端测试连接MySQL容器:

root@mysql-demo:~# mysql -u root -p -h172.26.160.105
mysql: Deprecated program name. It will be removed in a future release, use '/usr/local/mysql/bin/mariadb' instead
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 11.3.2-MariaDB-1:11.3.2+maria~ubu2204 mariadb.org binary distribution

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)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.002 sec)


MariaDB [(none)]> select user from mysql.user;
+-------------+
| User        |
+-------------+
| myuser      |
| root        |
| healthcheck |
| healthcheck |
| healthcheck |
| mariadb.sys |
| root        |
+-------------+
7 rows in set (0.004 sec)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1642323.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Enum,你学会了吗?

大家后,我是小七。 今天给大家分享下java.lang包下面Enum类的面试点,本文阅读需3分钟。 Java轮子 分享程序员日常、职场、互联网项目、开发经验,专注技术提升 12篇原创内容 公众号 在 Java 编程中,枚举类型(Enum&…

go是如何运行的?

前言 go程序的入口是main函数吗?诚然很多程序的入口都是main,比如java,C,C等,但是go由于他的运行时环境是代码,而不是像Java那样有自己的虚拟机,所以程序在运行main函数之前,需要做很多的准备工作, 该文章…

这书不错,古琴乐理实用教程(尹溧新编),有课学得通透。

通篇阅读后,发现这本书以古琴初习者、未系统接触过现代乐理的读者为对象,将复杂的古琴音乐理论简单化、通俗化。书中采用参照比较的方法、通俗易懂的语言、言简意赅的文字,并结合具体音乐作品将古琴研习中最主要的、最核心的理论知识进行简明…

【算法系列】哈希表

目录 哈希表总结 leetcode题目 一、两数之和 二、判定是否互为字符重排 三、存在重复元素 四、存在重复元素 II 五、字母异位词分组 六、在长度2N的数组中找出重复N次的元素 七、两个数组的交集 八、两个数组的交集 II 九、两句话中的不常见单词 哈希表总结 1.存储数…

登封授牌,花落郑州

近日,“大禹故里故都”授牌仪式在河南省登封市隆重举行,河南省社科院有关单位将匾牌授予登封市。报道称:至此,千百年来备受争议的大禹故里、故都问题,终于尘埃落定,华夏立国始祖大禹终于魂归故里。 略有微词…

《尿不湿级》STM32 F103C8T6最小系统板搭建(五)BOOT

一、BOOT是什么? 大多数初学者第一次接触BOOT总是对这个词感到不解,从哪冒出一个奇奇怪怪的东西还要接跳线帽,为什么要配置它才能进行串口程序的下载?为什么不正确配置会导致单片机无法正常启动…… boot,及物动词&…

IP 地理定位神话与事实

ip地理定位是一项技术,用于通过访问设备的ip地址来获取地理位置信息,例如国家、城市、经纬度等。该技术广泛应用于网站内容自定义、广告定位、网络安全和用户分析等领域。它通过与包含ip地址和地理位置映射的大型数据库进行查询来工作,但在准…

LeetCode406:根据身高重建队列

题目描述 假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。 请你重新构造并返回输入数…

「JavaEE」线程安全2:内存可见性问题 wait、notify

🎇个人主页:Ice_Sugar_7 🎇所属专栏:JavaEE 🎇欢迎点赞收藏加关注哦! 内存可见性问题& wait、notify 🍉Java 标准库的线程安全类🍉内存可见性问题🍌volatile 关键字 …

python大数据项目中的 DIM层数据处理

一、处理维度表数据 hive的配置 -- 开启动态分区方案 -- 开启非严格模式 set hive.exec.dynamic.partition.modenonstrict; -- 开启动态分区支持(默认true) set hive.exec.dynamic.partitiontrue; -- 设置各个节点生成动态分区的最大数量: 默认为100个 (一般在生产环境中, 都…

步进电机与伺服电机的区别

什么是电机? 电机是一种将电能转换为机械能的装置,通常由定子、转子和电磁场组成。当电流通过电机的绕组时,产生的磁场会与电机中的磁场相互作用,从而使电机产生旋转运动。电机广泛应用于各种机械设备和工业生产中,是现…

5.4代码

1.本质上升序列 我想到的是用回溯去找子集一个一个判断,当然这样的话会来的很慢,然后就在网上找到了大佬的方法,这东西居然是用动态规划来的,说是最长递增子序列的类似问题 ,感觉我好像写过类似的,但是去找…

gitee关联picgo设置自己的typora_图床

一:去gitee官网创建仓库:typora_图床 1.百度搜索关键字:gitee,进入官网 2.进入gitee登录或者注册自己的账号 3.进入主页后,点击右上方 4.点击新建仓库 5.设置仓库名:typora_图床 6.点击5的创建&#xff0…

基于Springboot的校运会管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的校运会管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&a…

让我们一起来领悟带环问题的核心思想

一、带环的链表: 本质还是快慢指针来解决 关于如下一个带环链表怎么去找到他们想碰到的节点呢????我们可以想到快慢指针,第一个快点走,若是有环就会进入环,此时快指针每次走2步&am…

边缘计算含义与应用简析

边缘计算概述 边缘计算使数据存储和处理靠近生成或收集数据的位置,而不是在位于数千公里的服务器上。它将通过保持灵活性在边缘无缝可靠地部署服务。它比云计算更安全,因为不需要传输数据。因此,在将数据从边缘移动到云端时,不用…

嵌入式开发六:新建工程—寄存器版

通过前面的学习,我们对 STM32 有了个比较清晰的了解,本次我们将讲解新建寄存器库版本 MDK 工程的详细步骤。后期我们基于固件库开发,借助Keil5的环境配置助手界面RTE,不需要进行文件移植,本节的寄存器版本,…

测试通过!X-Argus、X-Gorgon、X-Medusa和X-Helions

算法分析测试 Host:api5-normal-sinfonlinea.fqnovel.com Cookie:install_id2821771262445211; ttreq1$eb27d336c987581d9ed1b36c48cab2c7bcbc7305; d_ticket38b3fb964c1b4c5955565dc0f91cfcf64df74; odin_tte25761a2638b499c0bf8840c9857e43a17899df1213ba33153a266bbddf47b5…

CSS盒子模型 (盒子模型 下)

(大家好,今天我们将继续来学习CSS的相关知识,大家可以在评论区进行互动答疑哦~加油!💕) 目录 1.4 表格的细线边框 1.5 边框会影响盒子实际大小 1.6 内边距(padding) 案例:新浪微博选框栏…

口才训练:如何用声音和语言展现自我魅力

口才训练:如何用声音和语言展现自我魅力 这里有一篇1270字左右的文章,主要介绍如何用声音和语言来展现自我魅力: 口才训练是提升个人魅力的重要途径之一。魅力不仅取决于外表,更重要的是声音和语言的运用。良好的语言表达能力可以…