开发者学堂课程【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/
Frasing
:
1: mariadb--ibs-5.5.56-2.e17.x86_64
Verifying
:
MariaDB-client--10.2.15-1.e7. centos.x86_64
Verifying
:
perl-Net-Daemon-0.48-5. e17. noarch
Verifying
:
perl-Data-Dumper-2.145-3.e17. x86_64
Verifying
:
MariaDB-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:7
1e6: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
2m
kdir/m
ysqldb/(3306, 3307, 3308)/, socket pid. log. datal -p
v
chown-
R m
ysql. mys
q
l/mys
q
ldb/
3mysql_install_db --datadir =/mysqldb/3306/data -
-
user=mys
ql
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
d
at
adir=/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