【Mysql学习笔记】一、部署Mysql

一、Mysql基础概念

1、什么数据
文字、图像、声音、数字、密码、账号等等都是数据。

2、数据存储
将上述的数据转化为二进制数字,存储在磁性存储介质中,就是数据存储。就是用磁盘进行数据记录。
通俗的说,就是数据通过os的文件管理系统、以文件的形式显示出来。然后我们就可以通过各种各样的信息查看工具来查看这些信息了。比如我们用视频播放器查看视频数据、用音频播放器查看音频数据、用浏览器查看网页数据,对网页数据做一个具象化的展示,人类就可以看懂了。

3、什么是数据库DB
有数据,就会有海量的数据,就需要数据管理工具,数据库就诞生了。
DB,database,是一个按照数据结构来组织、存储、管理数据的仓库,是一个文件或一组文件。本质是文件信息管理,就是文件夹套文件。或者说就是一个软件,这个软件是用来读取、查找数据库记录的。因为这个软件有一个非常强大的搜索引擎,这个引擎可以非常方便的查找库中的表数据、以及多张表的联合查询。
表,table,是数据库中存储数据的基本单位。就是数据的存储、写入、查询都是对表的操作。
一个表有表名
一个表的行:就是一条数据,或者说一条样本
一个表的列:就是字段名,field,字段是标识不同的信息。

4、DBMS
database management service 数据库管理系统,是一个软件,用于创建和操作数据库。
主流的数据库软件:
mysql,被甲骨文公司收购后,就开始收费了,但还保留一个免费的mariadb
oracle甲骨文公司开发的数据库工具,是收费的。
microsoft SQL Server和SQLite是微软公司开发的数据库工具,其中SQLite是一款轻型的数据库工具。

5、mysql特点
(1)支持多种操作系统、多种语言、多线程、多种存储引擎。
(2)是一个基于socket(是linux本地的一个套接字文件,套接字=主机+端口号,通俗的理解就是在内存中进行数据共享的文件)编写的c/s运行架构的数据库软件,有服务端和客户端。服务端负责数据处理(比如查询数据、写入数据等操作),运行在数据库服务器上。

B/S是browser/server,指浏览器和服务器端,在客户机不需要安装软件,只需要安装一个浏览器。
C/S是client/server,指客户端和服务器,在客户机端必须安装客户端软件及相应环境后,才能访问服务器。

用户通过发送增删改查(就是sql语句)等请求,发送给客户端软件,然后通过网络提交请求给服务端,服务端接收到请求再进行处理,然后将结果返回给客户端,也就是给客户端一个响应。所以,当我们把mysql的服务端程序运行起来后,就可以在各种客户端去链接服务端的mysql去增删改查数据了。

服务端和客户端可以安装在不同的机器上,也可以安装在同一台机器上。

客户端软件既可以是mysql自带的,比如mysql命令、mysqldump命令等,也可以是比如各种第三方框架,比如python模块中的pymysql,去连接服务端的mysql。

二、部署单实例Mysql

1、版本选择
企业版:收费,性能稳定性都是最好的。
社区版:免费,开发和测试环境没有企业版那么严格。就是代码的严谨性和安全性没有企业版的好。适合学习用。

centos7建议安装MYSQL5.6

在企业生成环境中,也是不要追求最新版本,因为最新版本的文档、资料、bug等坑都还没有人踩过,稳定性不高。企业生产环境中,一定要选稳定版版本。目前互联网公司的主流版本是5.6或者5.5。

mysql-5.6.45.tar.gz
5是主版本号。如果软件格式大改动,主版本号会变化。
6是发行级别,主版本号和发行级别组合,构成发行序列号。如果功能变化较大,发行号就会递增,比如mysql-5.7.10
45表示此发行系列的一个版本,随着新版本发布,出现更新等,这个数据就进行递增,比如mysql-5.6.46.tar.gz。

2、安装
(1)rpm包安装。rpm是红帽的一个软件包管理系统。rpm包是二进制包的一种,但分了2种。
第一种是源码rpm包,就是源代码被打包成了rpm格式,就是你已经看不到源代码了,比如,name-version-release.arch.src.rpm包,这种包你还得重新编译rpmbuild --rebuild。
第二种是二进制rpm包,你当然也是已经看不到源代码了,因为已经被编译过了,比如name-version-release.arch.rpm包,这种包你可以通过rpm -ivh 命令自动安装,后续的软件升级卸载和查询都用rpm命令可以方便实现。但是由于已经事先编译过了,所以安装路径和一些功能已经被固定,你无法自己控制安装路径和灵活的增删一些新功能,而且需要手动解决依赖关系,最常见的4个依赖软件包是:mysql-client mysql-devel mysql-server mysql-shared,你都要下载。而且还可能会和系统当前的一些软件产生冲突,你得手动解决。而且在卸载的时候由于涉及到依赖关系,很可能会自动地就卸载移除掉系统所需地软件,导致系统崩溃。对于已经编译成二进制包的rpm包,由于操作系统环境不同,一般不能混用。

(2)yum安装。yum安装和rpm安装是一个理念,安装命令是:yum install mariadb-server mariadb -y ,但是不能安装你指定的版本,如果你要yum安装指定的版本,你得修改你的yum源。可以说yum是rpm的升级,所以yum安装可以自动帮你解决依赖问题。而且安装完毕可以systemctl start mariadb

(3)CMAKE编译安装:也就是源代码编译安装,用编译参数加装一些mysql的扩展功能。可以自己指定路径等信息。源代码安装包基本就只是一个携带版本号的tar包,比如mysql-5.6.49.tar.gz包,源代码安装的缺点就是比较难、安装时间长、对系统环境依赖性比较重。下面我们展示cmake编译安装。

(4)二进制包安装:软件包名字较长,带有版本号、操作系统平台信息、cpu架构等信息,比如mysql-5.0.45-linux-x86_64-glibc23.tar.gz 这种软件包是源代码已经被编译过的,我们只需要下载、解压后,可以直接在对应的系统平台上运行,所以这种包比较大,使用比较简单。后面我们讲多实例安装的时候展示这种安装方式。

3、安装包下载
Index of /mysql/

4、CMAKE编译安装mysql-5.6
前面我们编译安装都用的是make命令。
make读取makefile里面的指令,编译程序,makefile文件里又调用gcc命令去编译源文件
同理,cmake也是一个编译命令,用于一些跨平台的编译设置。

第一步:查看你虚拟机的基础配置,并关闭防火墙。
cat /etc/redhat-release 查看你的操作系统版本,是7就可以。
cat /proc/cpuinfo 查看一下你有几颗cpu,最好配置高一点,编译就快一些。

 

第二步:编译前的依赖安装
yum install -y ncurses-devel libaio-devel gcc make cmake 

第三步:创建一个名叫mysql的用户,用于授权目录。
我们之前都用root用户安装,安装完毕后,相应的文件的权限都是root权限,这个权限过大。所以我们先创建一个普通用户mysql,当我们把mysql编译安装完毕后,就把数据库的所有文件都授权给mysql用户,这样可以降低数据库的使用权限,保护文件安全。 

第四步:获取Mysql源代码并解压缩
wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.49.tar.gz 

 

第五步:执行cmake,生成makefile,用于编译安装 

cmake .
-DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.49
-DMYSQL_DATADIR=/application/mysql-5.6.49/data
-DMYSQL_UNIX_ADDR=/application/mysql-5.6.49/tmp/mysql.sock
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
-DEXTRA_CHARSETS=all
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_FEDERATED_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1
-DWITH_ZLIB=bundled
-DWITH_SSL=system
-DENABLED_LOCAL_INFILE=1
-DWITH_EMBEDDED_SERVER=1
-DENABLED_DOWNLOADS=1
-DWITH_DEBUG=0

验证是否安装正确:

 创建软连接,便于日后升级mysql

至此,mysql编译安装完毕。

5、Mysql数据初始化操作

初始化命令: /application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data/ --user=mysql

 查看是否正确初始化:

文件A就是mysql自带的一些核心数据,比如用于连接mysql的一些账号和密码的存储文件,也就是名字叫mysql的一个库。
文件B就是用于Mysql性能测试的一些库
看到上面2图的结果就说明你mysql初始化完毕。下面开始启动mysql:

6、启动mysql
启动Mysql就得配置mysql的启停管理脚本。
这个启停管理脚本你可以选择自己用shell语言自己写一个启停脚本,也可以选择,编译安装msql的时候,自动生成的启停管理脚本,然后看看有没有要修改的地方,有的话修改修改就可以拿来直接使用了。这里我们使用自动生成的脚本。

 系统生成的启停管理脚本也不需要我们修改,我们直接把这个脚本拷贝到/etc/inid.d目录下,再修改权限就可以用了。

现在是mysql的启停管理脚本文件配置好了,我们可以用这个文件启动Mysql了。但是一旦运行这个启停管理脚本文件去启动mysql,第一步就是开始自动加载并读取mysql的配置文件,因为mysql的配置文件定义了mysql的一些相关信息,比如日志往哪个文件写?socket套接字文件往哪写?以及编码设置等等。所以现在我们还得准备mysql的配置文件:my.cnf 

说明:如果你的netstat命令也不存在,用yum install net-tools -y安装。
至此,我们的mysql服务端,mysql-server已经正确启动了。用客户端连接mysql就可以进行数据的增删改查。

7、登录Mysql数据库,并修改密码
但是在登录前还得修改一下mysql的path变量,才能登录:

登录上了,先查看一下都有哪些库,再把test库删除了: 

然后再修改密码:
mysqladmin命令就是用来修改数据库信息的 

至此,我们的Mysql版本选择、下载、解压、编译安装、初始化、启动、登录、修改密码等一系列操作完毕。

三、部署多实例Mysql

上面内容演示的是单实例编译安装Mysql,本部分内容将讲多实例部署mysql数据库。因为很多情况下我们用的是多实例数据库。

(一)基本概念了解
单实例:就是在一台Linux上、某目录下、安装一个Mysql,并且启动、登录。换句话说就是,在某台机器上,有单独的一个Mysql个体,就是一个实例。
多实例:就是在一台linux上,同时运行多个mysql,当然是区别了不同的端口,比如3306、3307、3308,运行3个mysql数据库。而且这个3个mysql之间相互之间没有关系,在linux上的体现就是:

  • 不同的端口
  • 不同的数据目录,不同的配置文件
  • 不同的mysql进程,不同的pid

多实例配置mysql的最大意义就是充分利用计算资源。比如公司有多个业务,需要用到好几套mysql数据库,都单独部署,数据区分开,是逻辑最清晰的。但如果一台服务器只能运行一个mysql,那你就得购买好几台服务器,一是增加成本二是浪费资源。所以当单个服务器资源有剩余的时候,我们就部署多实例mysql数据库,就可以实现资源的逻辑隔离,就是通过目录进行了隔离,这样就可以实现不同业务的数据库服务能够各自尽量独立的提供服务而互相不受影响。如果公司资金紧张,但数据库又需要各自尽量独立的提供服务,而且还需要用到主从复制等技术提供备份或读写分离服务的需要,那么选择多实例就再好不过了。比如,可以通过3台服务器部署9-15个实例,交叉做主从复制、数据备份及读写分离,这样就可以等同于9-15台服务器每个只装一个数据库才有的效果。

这是一个Mysql复制与读写分离架构:

多实例这个概念,也就是一个程序,被我们运行了多个单独的个体,所以也不限于mysql,比如nginx, apache, redis, memcached等都可以多实例,只要它们的端口、数据文件、进程都是单独的可以。

多实例的弊端是存在资源互相抢占的问题。
当某个数据库实例并发很高或者有sql慢查询时,整个实例会消耗大量的系统CPU、磁盘i/o等资源,导致服务器上的其他数据库实例提供的服务质量一起下降。因为不同实例获取的资源是相对独立的,因为大家毕竟还是在同一个文件系统下的。它不像虚拟化技术那样可以实现完全隔离。

(二)多实例在linux上的实现方式
就是基于一套mysql应用(就是一份mysql应用程序),生成多个数据目录。
所以我们首先是准备一套mysql应用程序:而我们前面已经在/application目录下面安装了一套mysql-5.6.49,这套mysql应用就可以当作我们一个已经准备好的一套mysql应用程序。
生成多个数据目录:前面我们讲编译安装mysql的时候,当编译安装完毕后,我们进行了mysql初始化操作。当时初始化操作的这步就是配置基本目录、数据目录和用户。所以,现在我们只要在这一步配置多个目录,就可以实现多实例配置。

总结:就是编译安装一个mysql程序,然后进行三次初始化,生成三个数据目录,这三个数据目录就是3个独立的mysql实例。

我们采取的形式是:
先编译安装一个mysql程序,假如其目录是:/my_mysql/
然后创建实例1:/my_mysql/3306/,表示运行在3306端口的数据库实例1
然后再在3306文件夹下再创建:
/my_mysql/3306/data,表示数据库实例1的数据文件夹
/my_mysql/3306/my.cnf,表示数据库实例1的配置文件
/my_mysql/3306/mysqld,表示数据库实例1的启动脚本

同理,创建实例2:/my_mysql/3307/,表示运行在3307端口的数据库实例2
然后再在3307文件夹下再创建:
/my_mysql/3307/data,表示数据库实例2的数据文件夹
/my_mysql/3307/my.cnf,表示数据库实例2的配置文件
/my_mysql/3307/mysqld,表示数据库实例2的启动脚本

同理,创建实例3:/my_mysql/3308/,表示运行在3308端口的数据库实例3
然后再在3308文件夹下再创建:
/my_mysql/3308/data,表示数据库实例3的数据文件夹
/my_mysql/3308/my.cnf,表示数据库实例3的配置文件
/my_mysql/3308/mysqld,表示数据库实例3的启动脚本

最后是不同的应用程序读取不同mysql实例。

题外话:原则上我们是尽量让应用程序(后端程序)和数据库程序尽量分开,因为它们底层依赖的库不一样。而不同实例的数据库程序底层依赖都是一样的,区别仅仅是数据目录不同而已。

(三)部署mysql多实例
这里我们不用2描述的流程。我们再介绍一种Mysql安装方法:二进制包安装。二进制包是一个已经被编译过的包,只要下载解压运行即可。

前面我们讲源码编译安装的时候,当我们源码编译安装(下载源码-解压-cmake生成makefile文件-make-make && make install)完毕后,在/application目录下生成的mysql-5.6.49文件夹,就是我们编译安装的一套mysql应用程序。这个编译好的mysql-5.6.49文件夹里面有bin目录,bin目录里面有很多绿色的可执行文件,这些文件就是mysql编译安装后生成的一些mysql命令。二进制包就类似作者已经把源代码帮我们编译安装完毕了,然后把/application目录下的文件全部打包给我们,所以我们只需要解压就可以直接用了,因为mysql的这些命令都已经有了,直接用即可。

这里我们用二进制包安装的mysql,当作我们准备的一套Mysql应用程序,并且启动多实例。

1、我们还是去Index of /mysql/ 找mysq二进制包。

2、下载软件安装包并解压

3、安装运行mysql所需的依赖
yum install ncurses-devel libaio-devel gcc make cmake -y
这个我的机器都前面都已经装了,这里就不截图了。

4、清理之前的环境

 5、创建mysql用户

6、准备mysql多实例的数据目录 

7、准备mysql多实例的各个配置文件 

[client]

[mysqld]
port=3306 socket=/my_mysql/3306/mysql.sock basedir=/application/mysql-5.6.49-linux-glibc2.12-x86_64/ datadir=/my_mysql/3306/data log-bin=/my_mysql/3306/mysql-bin server-id=1

[mysqld_safe]
log-error=/my_mysql/3306/mysql_3306_error.log pid-file=/my_mysql/3306/mysqld_3306.pid

 8、准备各个实例的启停脚本
这里我们要自己手写一个简单一点的启停脚本

 我们就简单写启、停、重启3个函数即可。下面是赋予启停脚本的可执行权限:

下面写3307实例的启停脚本,直接复制3306的,然后把port改一下即可。然后赋予3307启停脚本的可执行权限: 

9、用户、组授权 

10、PATH配置 

11、创建2个实例的数据目录 

12、创建2个实例的错误日志文件 

13、多实例初始化
/application/mysql-5.6.49-linux-glibc2.12-x86_64/scripts/mysql_install_db --defaults-file=/my_mysql/3306/my.cnf --basedir=/application/mysql-5.6.49-linux-glibc2.12-x86_64/ --datadir=/my_mysql/3306/data/ --user=mysql

 

14、启动多实例mysql 

 15、登录多实例mysql

  • 登录方式一:当mysql的主机和客户机在同一个host上的时候,可以通过进程套接字文件 mysql.sock 登录。
    这种登录方式使用的是unix domain socket做为通信协议的载体,它比tcp快,在高并发情况下,效率更高。

只要mysql启动运行就会生成mysql.sock文件,当mysql实例关闭,sock文件被销毁。因为这个文件是和内存数据绑定的。所以只要Mysql进程存在,sock文件就存在,pid文件也存在,我们就可以用sock文件登录。


 所以这里我们是通过指定不同的sock文件,连接到不同的数据库,查看不同的信息:

登录方式二:通过传统的ip+port方式登录
登录语法是:mysql -u用户名 -p密码 -h服务端mysql的地址 -P端口 

这种登录方式不仅可以登录本地的mysql(就是本地机器既是mysql的服务端也是客户端),也可以远程登录mysql(就是mysql的服务端和客户端分离,不是一台机器的情况)。

16、修改Mysql多实例密码
和前面一样,可以用mysqladmin修改密码

3307实例的密码修改就截图展示了。

17、设置mysql的多实例开机自启

18、多实例mysql远程授权登录
前面讲了mysql是Client/Server架构。其中client可以是下面3种情况:
(1)用mysql原生命令登录。
此时你的另外一台机器上必须要安装mysql客户端,你就可以用命令:mysql -uroot -p -h192.168.159.101 -P3306 去登录3306实例了。但是如果此时报错:ERROR 1130:Host ‘xxxip号’ is not allowed to connect to this mysql server.就表示你这台xxxip号的机器没有被服务端mysql授权登录。所以此时你要运维人员在服务端开通xxxip号机器的登录权限。授权步骤如下: 

此时远程机器再用命令:mysql -uroot -p -h192.168.159.101 -P3306 登录101机器的3306端口,回车输入lyy密码就可以登录了。
(2)通过编写代码,连接到mysql服务端。所以我们可以写python、php脚本去远程连接mysql多实例。
(3)使用windows的同学,可以使用navicat图形化工具连接。这种最简单。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值