源代码编译安装 MySQL 和多实例| 学习笔记

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 快速学习源代码编译安装 MySQL 和多实例

开发者学堂课程【Linux MySQL 服务器搭建与应用源代码编译安装 MySQL 和多实例】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/578/detail/7986


源代码编译安装 MySQL 和多实例


目录

一、 源码编译安装 MySQLdb (包括二进制程序安装)

二、 回顾实验:yum 安装包的实现多实例


一、 源码编译安装 mariadb (包括二进制程序安装)

源码编译安装安装比之前的二进制安装多了编译过程,过程特殊在比较推荐的编译方法,用 cmake。但是它的选项特别像之前应用,该准备都是一样,后续操作几乎一样。

例如:编译后,指定路径,应用程序路径数据库路径,指定好之后准备变量,接着把数据库文件在生成,生成用户来拥有的管理的。这个是数据库路径,接着配置文件复制到目标,把数据库其中的脚本复制过去,启动。

后续过程,在演示二进制的过程中已经实行过,无非就是把二进制源码编译再进行一遍。大体上没区别,安装包依赖性比较多,而且装包要一下装完,缺包提示不是特别明确。以前的软件缺包比较明确,现在建议直接装好。

下载过程比较慢,安装比较快。14个包瞬间就装完。

1.源码编译

◆安装包

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- fCMakeCache.txt

有的时候安装包提示不是那么明确,建议直接装好。

◆做准备用户和数据目录

mikdir /data

useradd-r-s/bin/false-m-d / data/mysqldb/mysql

tar xvf mariadb-10.2.15.tar.gz

◆ cmake 编译安装

cd mariadb-10.2.15/

编译选项:

https://dev.mysql.com/doc/refman/5.7/en/sour.html

编译方式不是用以前的,而是用cmaker进行编译,但和以前的方式差不多。

◆准备环境变量

echo'PATH=/app/mysql/bin: $PATH >/etc/profile.d/mysgl.sh

/etc/profile d/mysql.sh

◆生成数据库文件

cd /app/ mysql/

scripts/mysql_install_db--datadir=/data/mysgldb/--user=mysql

◆准备配置文件

cp/app/mysal/support-files/my-huge.cnf /etc/my.cnf

◆准备启动本

cp /app/mysql/support-files/ /etc/init.d/mysqld

◆启动服务

chkconfig --add mysgld ;service mysqld start

下面是最新版。

The latest information about mariadb is available at http: //mariad b.org/.

You can find additional information about the MYSQL part at:

http: //dev. mysq1 . com

Consider joining MariaDB's strong and vibrant community:

https: //mariadb. org/get-involved/

Frasing1: mariadb--ibs-5.5.56-2.e17.x86_64

VerifyingMariaDB-client--10.2.15-1.e7. centos.x86_64

Verifying perl-Net-Daemon-0.48-5. e17. noarch

Verifyingperl-Data-Dumper-2.145-3.e17. x86_64

VerifyingMariaDB-server-10.2.15-1.e17. centos. x86_64

Verifying perl-Io-Compress-2. 061-2.e17. noarch

刚在在系统中,本身的数据库是没有大写的,官方提供的是大写的,装完之后,对应的目录下找到相应的服务名,etc 就是 usr,启动服务,用官方提供的方便。

一般生产中,专门做数据库,通常用二进制。现在用 yum 安装,数据库入境想放在别的路径下,需要改别的配置。server 里面找一下有没有 MySQL 的设置,接下来单独一行。

举例,规划在这里,目录需要重新创建,改所有者,跑一下数据库的生成,有数据库生成命令,用户是 mysql,把数据库装到这里面去。

把服务重启一下,确认一下,数据库的内容就被改动了。确定改动,可以看文件的时间变化,时间是刚刚生成的。

比如创建一个新的数据库,看目录下是否生成 db 的文件夹。

//this is read by the standalone daemon and embedded servers

[server]

#this is only for the mysgld standalone daemon

[mysgld

datadira/data/mysql db

#

Galera-related settings

[galeral]

Mandatory settings

wsrepon=on=ON

wsrep_ providers=

#wsrep _cluster_ address=

binlog_ format=row

default _storage _engine=InnoDB

#innodb_autoinc_ lock_mode=2

Allow server to accept connections on all interfaces.

#bind-address=0.0.0.0

#bind-adaress=. 0..

#

Optional setting

#wsrep_slave_threads=1

#innodb_flush_log_at_trx_commit=0

this is only for embedded server

[embedded]

This group is only read by MariaDB servers, not by MySQL.

"server. cnf" 46L, 1101C written

[ root@centos7 my. cnf. d]#mkdir /data/mysql db

mkdir: cannot create directory /data/mysqldb': No such file or directory

[ root@centos7 my: cnf d] #mkdir /data/mysqldb -pv

mkdir cannot created directory '/data/ mysql db: No such file or directory

mkdlr: cannot created directory '/data/ mysql db: No such file or directory

[root@centos7 my cnf. d]

/data/mysqidb -pv

mkdir: created directory /data

mkdir: created directory/ data/mysql db'

[rootcentos7 my. cnf. d] chown mysql mysql /data/mysql db/

[root@centos7.my.cnf. d]#mysq--db--datadir-data/mysql db

比如创建一个新的数据库,看目录下是否生成 db 的文件夹。

Mon Jun 4 17: 30: 42 CsT 2018

[rootcentos? my. cnf. d] #my sql

Welcome to the MariaDB monitor. Commands end with or \g.

Your MariabB connection id is 8

server version: 10. 2.15-MariaDB MariaDB Server

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

ypehelp'or'h' for help.type'\c' to clear the current input statement.

MariaDB [(none)]> create database dbl;

Query oK, 1 row affected (0. 01 sec)

MariaDB [(none)]>! 1s /data/mysql db

Ready

sh2: AF

可以确定目录确定起作用,后期可以数据库路径,改配置文件,重新做一些设置即可,

源码编译

先拿源码,加 linux 就是二进制,在干净环境中,装包,复制之前的安装包,装完之后,创建用户,把代码执行一下。

二进制安装和源码安装大体上大同小异,多了编译的过程,其他的都不需要。


2. 实验:

centos77.4 二进制安装

mariadb-10..15 -1inux---x86_64.tar.gz

指定一个用户数据存放的路径,所有者mysql放到代码里,二进制程序源码进行编译。

用cmake来实现,cmake代码直接复制,指定数据库安装的位置。这个路径,用源码编译,二进制安装就不可以,拿的是编译完的结果,因为源码编译可以随便指定,数据库也可以随意指定,特性也可以指定。现在很多数据库的概念也不是很了解,先执行一下,看看效果。

(1)步骤

1检查环境

iptables

selinux

mariadb-server

2下载二进制包

3 useradd -r-d /data/mysqldb /sbin/nologin mysql

4 tar xvf mariadb-10. 2. 15-1inux-x86 64. tar. gz -C /usr/local/

cd /usr/local

In- mariadb--10.2.15-inux-x86_64/mysq

chown-R root: root mvsal/

5 echo PATH=/usr/local/mysq1/bin: SPATH >/etc/profile. d/mysql. sh

/etc/profile. d/mysol. sh

6 mkdir -Dy /data/mysoldb

chown mysol. mysgl /data/mysoldb

chmod 770 /data/mysaldb

7

cd /usr/local/mysol

scripts/mysql_install_db -datadir/data/mysqldb --user=mysql

8

ed /usr/local/mvsol

cp support-files/my-huge. cnf /etc/my. cnf

vim /ete/my. cnf

[mvsoldl

datadir=/data/mysaldb加此行

需要把二进制的源码做一下编译,用 cmake 来实现。

cmake.\

-DCMAKE_INSTALL_PREFIX=/app/mysql\

-DMYSQL_DATADIR=/data/mysqldb/\

-DSYSCONFDIR=/etc\

-DMYSQL_USER=mysql

-DWITH INNOBASE STORAGE ENGINE=\

-DWITH ARCHIVE_STORAGE_ENGINE=\

-DWITH_BLACKHOLE_STORAGE_ENGINE=1\

-DWITH PARTITION STORAGE_ENGINE=1

-DWITHOUT MROONGA_STORAGE_ENGINE=1

-DWITH_DEBUG=\

-DWITH READLINE=1\

-DWITH_SSL=system\

-DWITH_ZUB=system\

-DWITH_LBWRAP=\

-DENABLED_LOCAL INFILE=1

-DMYSQL_UNIX_ADDR=/app/mysql/mysql.sock

-DDEFAULT_CHARSET=utf8\

-DDEFAULT_COLLATION=utf8_general_ci

make &  & make install

将来数据库的路径可以自己指定,其他特性自己定义。

先进入目录中,接下来执行 make install,当然 cpub 调一下,让运行快一些,时间太长可以设置响声。

把关键文件复制,指定好文件。源码编译没什么特殊之处,多了源码编译过程,其他与二进制安装相同,这就是源码编译包括二进制程序安装的一些方法。


(2) 关系型数据的常见组件

所谓多实例可以把数据库给他在一个术阶上跑多个实例。刚才这个机器通过官方提供的 yum 包安装10.2.15版本,现在实现多实例。多实例就是在一个主机上跑好几个mysql 实例数据库。每个数据库管理自己独立的数据库文件。

数据库: database

表: table

行:row

列: column

索引: index

视图: view

用户: user

权限: privilege

存储过程: procedure, 无返回值

存储函数: function, 有返回值

触发器: trigger

事件调度器: event scheduler, 任务计

跑多个实例,端口号不能用3306,可能有的用3306,另外换一个端口,用3307,3308跑多个实例,对外相当于三个服务器一样。

实现这个功能,要参考所谓的 yum 安装的包,可以用二进制的包做成多实例的,也可以用 yum 安装生成的包做成多实例。用 yum 安装的包方便。

实例上跑多个实例有多个方法。

具体操作如下:

Troot@cen

[root@centos7~]#

[root@centos7 ~]#

[root@centos7 ~]#

Troot@centos7~]#

[ root@centos7 ~]#ip a

1.To: <LOOPBACK, UP, LOWER_UP> mtu 65536 gdisc noqueue state UNKNOWN qlen 1

1ink/loopback00:00:00:00:0:00brd00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_1 1ft forever preferred_1ft forever

inet6::1/128 scope host

valid 1ft forever preferred_lft forever

2.etho: <BROADCAST, MULTICAST, UP, LOWER_UP> mtu 1500 gdisc pfifo_fast state up qlen 1000

link/ether 00: 0c: 29: ef: 33: 6d brd ff: ff: ff: ff: ff: ff

inet 192-168.30.17/24 brd 192.168.30.255 scope global etho

valid_lft forever preferred_lft forever

inet6 fe80:1704: ee00:71e6:3415/64 scope1ink

valid_lft forever preferred ift forever

inet6 fe80: cb4a: 3eal: ba3:e72d/64 scope link tentative dadfailed

valid_lft forever preferred_1ft forever

otecentos7

multi 可以实现多实际,缺点程序必须是同一版,实现不同版本的多实例,比如这里有5.5,5. 6,5.7,这三个版本,都想运行,yu就不实用了。mult可以实现,但是依赖当前安装包的版本。

当前的版本是5.5,多实例也是5.5版本,不能做不同版本的多实例,灵活性差。有些企业实现5.5,5.6版本在一个界面上跑,这是不同版本的多实例。

演示一下多实例,换另一种方法。目标在一个主机上跑多个版本。首先安装主程序,yum 程序已经安装好,默认途径,每个都有自己的数据库,自己部署各自的实例,有自己的入境方式。

mysql db 这个目录下存放三个实例各自不同的数据库,其中为了加以区分,三个实例用不同端口号,用端口号区分他们建立三个文件夹,3306,3307,3308,三个子文件夹。

这个文件夹下有各自独立的配置,有些设置比如日志,比如所谓的 pid 文件,比方说socket 文件,装完数据库,都有这些东西。开了3306,有进程文件,所谓 socket 文件也是有的。只要服务启动,文件就生成,服务停止,文件就删了。实现多实例的时候。各有各的 socket 文件和 pid 文件,数据库文件。

将来应该准备三套配置文件,这个配置文件是当前适用的。每个配置文件都要定义socket 文件路径,pid 文件,日志文件,包括数据库路径。配置文件有专门的文件夹,socket 文件也可以专门放一个文件夹。pid 和日志也可以。关键所谓的数据库,每一个应该有自己的数据库数据,并存放到文件里。

建立数据,去看一下当前的目录结构,关于3306相关数据全放在这里,接下来准备数据库存放,将来需要指定文件夹的所有者应该是 mysql,因为是 yum 安装,账号默认生成,如果没有需要手动建立,现在希望让用户能管理文件夹,把文件的权限所有者改变成 mysql 即可。所有者都是 mysql,可以完全控制文件。

接下来把数据库这些文件生成,生成三个各自不同的数据库文件,各自放在 data 文件夹里。现在指定 mysql db/3306 的 data,另外要指定用户 mysql 的身份,如果是编译和二进制安装,尤其是编译安装,路径要指定。路径如果是源码编译,需要查一下。

启动服务后登录,去查看变量 variables like,这里面有个变量 basedir,这个变量存的路径叫 user。

这个路径就是指定的路径,二进制要指定。回车生成数据库,看一下 mysql 这个3306的目录下已经生成了若干数据库文件,重复操作3307.3308,之后各自都有自己的数据库文件。

针对每个实例都有自己的独立配置文件,系统自带的配置文件复制到etc文件夹中,专门放各自的配置文件,可以看其中的内容。

代码:

27 directories, 276 files

[root@centos7~] #cp /etc/my. cnf /mysql db/3306/etc/

[root@centos7~]#cp /etc/my. cnf /mysqldb/3307 /etc/

[root@centos7~]#cp /etc/my. cnf /mysqldb/3308/etc/

[root@centos7 ~]#vim /mysqldb/3308/etc/my cnf

包含etc的cnf.d可以删除,接下来数据库路径不在这里,mysql db3306 下的 data,包括这里的 socket 文件也规划好了路径。所有内容放在一个文件中。

数据库入境是 mysql db/3306/ data,日志建的是 log 这样的目录,port 默认是3306,可以不用写,这是改过的配置文件,接下来的3307和3308可以复制,并替换其中的3306的内容,稍微调一下文件。

启动脚本,要准备三套配置文件和三套脚本适用三套实例。事先可以准备好脚本,脚本内容简单。

!/bin/bash

port=3306

mysql_user="root"

mysql_pwd="centos"

cmd_path="/app/mysql/bin

mysgl basedir="/mysgldb"

mysql_sock=&{ mysql_basedir}/&{ port}/ socket/ mysql. sock"

密码还未设置,实例装完后是空的。

程序路径当时装在 usr 下面。

路径改成 usr /bin,事先规划 mysql 数据实例,socket 文件路径就是 mysql 路径,下面有 socket 文件,全是用变量组合起来的,把脚本改名成3307和3308。

socket 后续是启动服务的脚本,把 mysql safe 加上指定的配置文件,每个实例都有自己独立的配置文件,各自下面都行 etc,读配置文件,启动服务,关闭用mysqlsdmin shutdown,指定用户名和路径。后面重启都是类似的。

这个文件复制一下,复制到服务脚本,服务脚本没有定义路径。现在复制到对应的目录下,复制后,3307.3308对每个文件夹都得改正,其他都不用。事实上完全拿一个脚本。

为了独立,做了三个脚本。其他路径都是有规范的,准备好之后,把服务启动起来,跑脚本,先把系统自带的实例关闭,运行规划好的三个实例。拿3308,有个data 目录放了很多数据,etc 有配置文件,log 会自动生成。

文件夹只有跑起才会生成对应的文件。

现在运行脚本3308,但是没有颜色,就没有执行权限,需要加执行权限。为了安全,权限改成700,这样文件的权限只有弱的才能访问。其他的类似,有执行权限,可以跑脚本,后面跟 start 参数。

可以尝试启动,命令启动很快,可以看下 mysql3308 为例,生成若干个文件,启动后就可以连接某一个实例,默认以弱的身份连,数据库路径在 socket 文件,确定是否为实例,

代码如下

8 directories, 100 files

[root@centos7 -]# mysql

ERROR 2002 (HY000): Can't connect to local MySQL server through socket'/ var/ lib/ mysql/ mysql. sock'

[root@centos7~]mysq-s/mysqldb/3308/socket/mysq.sock

Welcome to the MariaDB monitor.Commands end with or \g.

Your MariaDB connection id is i

Server version: 5.5.56-MariaDE MariaDB Server

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

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

MariaDB [(none)]> show variables like port.

启动成功。

创建数据库 db3307,退出来,在数据裤的目录下生成子文件夹。成功后可以访问。

 

二、 回顾实验:yum 安装包的实现多实例

1 yum install mariadb-server

2mkdir/mysqldb/(3306, 3307, 3308)/, socket pid. log. datal -pv

chown- R mysql. mysql/mysqldb/

3mysql_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

4

cp /etc/my. cnf /mvsaldb/3306/etc/

vim /mysaldb/3306/etc/. cnf

[mvsgld]

port=3306

datadir=/3306/data

socket=/mysqldb/3306/socket/mysql. sock

[mysald safe]

log-error=/mysqldb/3306/1og/mariadb. log

pid-file=/mysqldb/3306/pid/mariadb. pid

#!includedir /etc/my. cnf.d

cp /mysqldb/3306/ete/my. cnf /mysqldb/3307/etc/my. cnf

cp/mysqldb/3306/etc/my. cnf /mysqldb/3308/etc/my.cnf

vim /mysqldb/3308/etc/my. cnf

vim/mysqldb/3307/etc/my.cnf

5

cp mysald /mysqldb/3306/

cp mysald /mysqldb/3307/

cp mysald /mysqldb/3308/

chmod 700/mvsqldb/3308/mysald

chmod 700 /mysqldb/3307/mysgld

chmod 700 /mysqldb/3306/mysqld

vim /mysqldb/3306/mysqld

vim /mysqldb/3307/mysqld

vim /mysqldb/3308/mysqld

6/mysqldb/3308/mysqld start

/mysqldb/3307/mysqld start

/mysqldb/3306/mysqld start

7

mysql -S /mysqldb/3308/socket/mysql. sock

mysql -S /mysqldb/3307/socket/mysql. sock

mysql -/mysqldb/3306/socket/mysql. sock

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
存储 关系型数据库 MySQL
环比、环比增长率、同比、同比增长率 ,占比,Mysql 8.0 实例(最简单的方法之一)(sample database classicmodels _No.2 )
环比、环比增长率、同比、同比增长率 ,占比,Mysql 8.0 实例(最简单的方法之一)(sample database classicmodels _No.2 )
140 1
|
2月前
|
SQL 前端开发 关系型数据库
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
62 0
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
|
1月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。通过具体案例,读者可以了解如何准备环境、下载源码、编译安装、配置服务及登录 MySQL。编译源码安装虽然复杂,但提供了更高的定制性和灵活性,适用于需要高度定制的场景。
113 3
|
1月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
166 2
|
1月前
|
关系型数据库 MySQL 数据库
【赵渝强老师】启动与关闭MySQL数据库实例
MySQL数据库安装完成后,可以通过命令脚本启动、查看状态、配置开机自启、查看自启列表及关闭数据库。本文提供了详细的操作步骤和示例代码,并附有视频讲解。
|
2月前
|
存储 关系型数据库 MySQL
mysql 8.0 的 建表 和八种 建表引擎实例
mysql 8.0 的 建表 和八种 建表引擎实例
33 0
|
2月前
|
存储 关系型数据库 MySQL
Key_Value 形式 存储_5级省市城乡划分代码 (mysql 8.0 实例)
本文介绍了如何使用MySQL8.0数据库中的Key_Value形式存储全国统计用区划代码和城乡划分代码(5级),包括导入数据、通过数学函数提取省市区信息,以及查询5级行政区划的详细数据。
39 0
|
2月前
|
算法 关系型数据库 MySQL
复购率 mysql 实例(sample database classicmodels _No.1 )
复购率 mysql 实例(sample database classicmodels _No.1 )
35 0
|
3天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
12 3
|
3天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
16 3