【转】数据库介绍(MySQL安装 体系结构、基本管理)

【转】数据库介绍(MySQL安装 体系结构、基本管理)

第1章 数据库介绍及mysql安装

1.1 数据库简介

  数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。

  所谓“数据库”系以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。

1.1.1 什么是数据

  数据是指对客观事件进行记录并可以鉴别的符号,是对客观 事物的性质、状态以及相互关系等进行记载的物理符号或这些物 理符号的组合。它是可识别的、抽象的符号。

1.1.2 数据库管理系统

非关系型数据库

  NoSQL:非关系型数据库(Not only SQL)

不是否定关系型数据库,做关系型数据库的的补充。
想做老大,先学会做老二。

关系型数据库

  关系型数据库的特点

二维表
典型产品 Oracle传统企业,MySQL是互联网企业
数据存取是通过SQL(结构化查询语句)
最大特点,数据安全性方面强(ACID) 

1.1.3 NoSQL特性总览

  l  不是否定关系型数据库,而是作为补充,现在也有部分替代的趋势。

  l  关注高性能,高并发,灵活性,忽略和上述无关的功能。

  l  现在也在提升安全性和使用功能。

  l  典型产品:Redis(持久化缓存,两个半天)、MongoDB(最接近关系型数据 的NoSQL)、Memcached。

  l  管理不适用SQL管理,而是用一些特殊的 API 或 数据接口。

1.1.4 NoSQL的分类、特点、典型产品

  键值(KV)存储:Memcached、Redis

  列存储(column-oriented):HBASE(新浪,360)、Cassandra(200台服务器集群 )

  文档数据库(document-oriented):MongoDB(最接近关系型数据库的NoSQL)

  图形存储(Graph):Neo4j

    数据来源: https://db-engines.com/en/ranking

1.2 数据库相关产品

1.2.1 Oracle公司产品介绍

  Oracle数据库版本介绍

    7--8i--9i--10g—11g--12c--18c(?)

  Oracle的市场应用

    a)  市场份额第一,趋势递减

    b)  市场空间,传统企业

    c)  传统企业也在互联网化

  MySQL数据库版本介绍

    5.0--5.1--5.5--5.6--5.7--8.0

  MySQL的市场应用

    a)  中、大型互联网公司

    b)  市场空间:互联网领域第一

    c)  趋势明显

    d)  同源产品:MariaDB、perconaDB

1.2.2 其他公司产品

  微软:SQL Server

微软和sysbase合作开发的产品,后来自己开发,windows平台
3,4线小公司,传统行业在用

  IBM :DB2数据库

   市场占有量小

      目前只有:国有银行(人行、中国银行、工商银行等)、中国移动应用。

下面三者广泛应用在大型互联网公司

  PostgreSQL
  MongoDB
  Redis

1.3 Mysql简介

1.3.1 mysql数据库发展史

1 1979年,报表工具Unireg出现。
2 1985 年,以瑞典David Axmark 为首,成立了一家公司(AB前身),IASM引擎出现。
3 1990年,提供SQL支持。
4 1999-2000年,MySQL AB公司成立,并公布源码,开源化。
5 2000年4月BDB引擎出现,支持事务。
6 2008年1月16日,Sun(太阳微系统)正式收购MySQL。
7 2009年4月20日,甲骨文公司宣布以每股9.50美元,74亿美元的总额收购Sun电脑公司,MySQL 转入Oracle 门下。
8 2013年6月18日,甲骨文公司修改MySQL授权协议,移除了GPL。但随后有消息称这是一个bug。

1.3.2 MySQL的特点简介

  开源、社区版免费、简单,使用方便,可靠、稳定、安全、社区活跃

1.3.3 mysql产品线的介绍

mysql产品线(主线)

  3.26--5.2版本

    – 正宗后代

    – Centos5、6中默认有5.1版本

    – Centos7中默认是MariaDB

  5.4--5.7 ,8.0版本

    – 借鉴社区好的贡献,进一步开发的版本

    – 主流版本:5.5 5.6 5.7

  MySQL Cluster 6.0 版本&更高

    – 类似于Oracle RAC,硬件要求高。

    – 一般各大网站没有人用

         mysql产品线(派生产品)

                  派生版本有Drizzle、MariaDB、Percona Server及OurDelta等。

1.3.4 企业生产场景选择MySQL数据库建议:

1) 稳定版:选择开源的社区版的稳定版GA版本
2) 产品线:可以选择5.1或5.5 互联网公司主流5.5,其次是5.1和5.6
3) 选择MySQL数据库GA版发布后6个月以上的GA版本。
4)要选择前后几个月没有大的BUG修复的版本,而不是大量修复BUG的集中版本
5)最好向后较长时间没有更新发布的版本
6)要考虑开发人员开发程序使用的版本是否兼容你选的版本
7)作为内部开发人员开发测试数据库环境,跑大概3-6个月的事件
8)优先企业非核心业务采用新版本的数据库GA版本软件
9)向DBA高手请教,或者在及技术氛围好的群里和大家一起交流,使用真正的高手们用过的好用的GA版本产品
10)若是没有重要的功能BUG或性能瓶颈,则可以开始考虑作为任何任务数据服务的后端数据库软件

1.4 mysql数据库的安装

1.4.1 系统环境说明

[[email protected] ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[[email protected] ~]# uname -r
2.6.32-696.el6.x86_64
[[email protected] ~]# /etc/init.d/iptables status
iptables: Firewall is not running.
[[email protected] ~]# getenforce
Disabled
[[email protected] ~]# hostname  -I
10.0.0.52 172.16.1.52

1.4.2 mysql编译安装

  安装依赖包

yum  install  -y  ncurses-devel libaio-devel

  安装cmake编译工具

  cmake

  定制功能:存储引擎、字符集、压缩等

  定制安装位置、数据存储位置、文件位置(socket)

yum install cmake -y

  创建mysql管理用户

useradd -s /sbin/nologin -M mysql -u1000
id mysql

  下载mysql软件包,解压

mkdir  -p /server/tools
cd /server/tools
wget -q http://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.40.tar.gz
tar xf mysql-5.6.40.tar.gz

注:这里使用的是sohu的镜像源进行下载(软件版本5.6.40)

    官方下载方式参考:http://www.cnblogs.com/clsn/p/8025324.html#_label4

进入查询目录,使用cmake进行编译,安装,创建软连接,过程时间较长。

cd mysql-5.6.40
cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.40 -DMYSQL_DATADIR=/application/mysql-5.6.40/data -DMYSQL_UNIX_ADDR=/application/mysql-5.6.40/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_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=bundled -DENABLED_LOCAL_INFILE=1 -DWITH_EMBEDDED_SERVER=1 -DENABLE_DOWNLOADS=1 -DWITH_DEBUG=0
make && make install
ln -s /application/mysql-5.6.40/ /application/mysql

1.4.3 数据库安装后的操作

  复制配置文件

\cp  /application/mysql/support-files/my-default.cnf /etc/my.cnf

  编译的MySQL可以暂时不需要设置配置文件。

  注意:如果以前操作系统中安装过rpm格式的mysql,系统中可能会遗留/etc/my.cnf文件,我们需要将它删除掉

初始化数据库

/application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data --user=mysql

  防止报错:数据库启动会提示,找不到xx/tmp/mysql.sock,原因是5.6.40版本不会自动创建tmp目录,需要我们手工创建。

mkdir /application/mysql/tmp

  修改程序目录的属主,属组

chown -R mysql.mysql /application/mysql/

  复制启动脚本,并修改权限

cp support-files/mysql.server /etc/init.d/mysqld
chmod 700 /etc/init.d/mysqld

  添加环境变量,使用mysql命令

echo ‘PATH=/application/mysql/bin/:$PATH‘ >>/etc/profile
tail -1 /etc/profile
source /etc/profile
echo $PATH
mysql

1.4.4 数据库安全设置

  设置root用户密码

mysqladmin -u root password ‘123456‘
mysql -uroot -p123456

  优化数据库(清理用户及无用数据库)

select user,host from mysql.user;
drop user ‘‘@‘db02‘;
drop user ‘‘@‘localhost‘;
drop user ‘root‘@‘db02‘;
drop user ‘root‘@‘::1‘;
select user,host from mysql.user;
drop database test;
show databases;

1.5 mysql 5.7版本安装说明

  主机系统环境说明

[[email protected] ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[[email protected] ~]# uname -r
2.6.32-696.el6.x86_64
[[email protected] ~]# getenforce
Disabled
[[email protected] ~]# /etc/init.d/iptables status
iptables: Firewall is not running.
[[email protected] ~]# hostname -I
10.0.0.153 172.16.1.153

  获取软件(采用二进制包方式进行安装)

mkdir -p /server/tools
cd /server/tools
wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz

  解压

tar xf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz

  将软件移动到程序目录,创建软连接

mkdir -p /application/
mv mysql-5.7.17-linux-glibc2.5-x86_64 /application/mysql-5.7.17
ln -s /application/mysql-5.7.17 /application/mysql

  添加mysql用户,并进行授权

useradd -M -s /sbin/nologin  -u 1000 mysql
chown -R mysql.mysql /application/mysql-5.7.17

  初始化数据库

/application/mysql-5.7.17/bin/mysqld --initialize --user=mysql --basedir=/application/mysql-5.7.17 --datadir=/application/mysql-5.7.17/data

         初始化时注意最后一行输出root密码

2017-12-13T08:40:31.760309Z 1 [Note] A temporary password is generated for [email protected]: )*1E7=fYd&>i

  拷贝配置文件和启动文件

\cp /application/mysql-5.7.17/support-files/my-default.cnf /etc/my.cn
\cp \application/mysql-5.7.17/support-files/mysql.server /etc/init.d/mysqld

# 修改启动文件内容(配置目录)

  将程序安装到 /usr/local/ 下 可以省略这步操作

sed ‘s#/usr/local#/application#g‘ /application/mysql-5.7.17/bin/mysqld_safe /etc/init.d/mysqld -i

  启动mysql

[[email protected] tools]# /etc/init.d/mysqld start
Starting MySQL.Logging to ‘/application/mysql/data/db13.err‘.
 SUCCESS!
[[email protected] tools]# /etc/init.d/mysqld status
 SUCCESS! MySQL running (1509)

  添加环境变量

echo ‘PATH=/application/mysql/bin/:$PATH‘ >>/etc/profile
tail -1 /etc/profile
source /etc/profile
echo $PATH

修改mysql密码

[[email protected] tools]# mysqladmin -uroot -p password 123456
Enter password: 【输入初始化时生成的密码】
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

第2章 Mysql体系结构与基本管理

2.1 客户端与服务器端模型

2.1.1 mysql服务结构

mysql是一个典型的c/s模式,服务端与客户端两部分组成

        服务端程序 mysqld
        客户端程序 mysql自带客户端(mysql、mysqladmin、mysqldump等)
                  第三方客户端  API接口(php-mysql)

2.1.2 mysql连接方式

TCP/IP 连接   网络连接串(通过用户名 密码 IP 端口进行连接)

mysql -uroot -p123 -h 127.0.0.1 -P 3306

socket 连接   网络套接字(用户名 密码  socket文件)

mysql -uroot -p123 -S /application/mysql/tmp/mysql.sock 

在linux中使用mysql命令不加其他的参数连接方式即

mysql -uroot -poldboy123使用的是套接字文件方式登录的

2.1.3 MySQL在启动过程

  启动后台守护进程,并生成工作线程

  预分配内存结构供MySQL处理数据使用

  实例就是MySQL的后台进程+线程+预分配的内存结构

2.2 Mysqld服务的构成

2.2.1 连接层

  通讯协议为:tcp/ip 或 socket

  连接线程 为连接的数量

  用户验证 为通过用户名 密码验证进行通讯协议

2.2.2 SQL层

  sql即结构化的查询语句(数据库内部逻辑语言)sql92 sql99

  DDL 数据库定义语言

  DCL 数据库控制语言

  DML 数据库操作语言

  DQL 数据查询语言

SQL层的功能: select * from wordpress.user;

1、判断语法、语句、语义
    判断语句类型
2、数据库不能直接响应sql语句
    必须明确的知道数据在哪个磁盘
3、数据库对象授权情况判断
    授权失败不继续
4、解析(解析器)
    将sql语句解析成执行计划,运行执行计划,生成找数据的方式
5、优化 (优化器)
    运行执行计划
   5.6之后 基于代价的算法,从执行计划中选择代价最小的交给"执行器"
6、"执行器"
    运行执行计划
    最终生产如何去磁盘找数据方式
7、将取数据的方式,交由下层(存储引擎层)进行处理

8、最终将取出的数据抽象成管理员或用户能看懂的方式(表),展现在用户面前

9、查询缓存: 缓存之前查询的数据。
    假如我们查询的表是一个经常有变动的表,查询缓存不要设置太大  

  SQL层处理流程

2.2.3 存储引擎层

  由上层决定存储方式

    存储引擎是充当不同表类型的处理程序的服务器组件。

  存储引擎层功能:

    存数据、取数据

    数据的不同存储方式

     不同的管理方式:

       事务(增、删、改)

      备份恢复

      高级功能(高可用的架构、读写分离架构)

2.2.4 依赖于存储引擎的功能

存储引擎是充当不同表类型的处理程序的服务器组件。

存储引擎用于:

存储数据、检索数据、通过索引查找数据
        存储介质、  事务功能、  锁定、备份和恢复、优化

  特殊功能:

全文搜索、引用完整性、空间数据处理    

  双层处理

上层包括SQL解析器和优化器、下层包含一组存储引擎

  SQL 层不依赖于存储引擎:

引擎不影响SQL处理

2.2.5 mysql 的逻辑构成(数据库内部结构)

  逻辑构成是为了用户能够读懂数据出现的,让你更好的理解数据。

  管理数据的一种方式。

对象:
            库中包含表,在linux中以目录表示
            表中有列结构与行记录,在linux中以多个文件表示
                行记录
                列结构

  切换库

mysql> use mysql;

  查看表

mysql> show tables;

  查看列的信息(记录)

mysql> desc user;

2.2.6 mysql的存储方式

程序文件随数据目录一起存储在服务器安装目录下。执行各种客户机程序、管理程序和实用程序时将创建程序可执行文件和日志文件。首要使用磁盘空间的是数据目录。

服务器日志文件和状态文件:

  包含有关服务器处理的语句的信息。日志可用于进行故障排除、监视、复制和恢复。

  InnoDB 日志文件: (适用于所有数据库)驻留在数据目录级别。

  InnoDB 系统表空间:  包含数据字典、撤消日志和缓冲区。

每个数据库在数据目录下均具有单一目录(无论在数据库中创建何种类型的表)。数据库目录存储以下内容:

数据文件:
     特定于存储引擎的数据文件。这些文件也可能包含元数据或索引信息,具体取决于所使用的存储引擎。
格式文件 (.frm):
   包含每个表和/或视图结构的说明,位于相应的数据库目录中。
触发器:
     与某个表关联并在该表发生特定事件时激活的命名数据库对象。

  数据目录的位置取决于配置、操作系统、安装包和分发。典型位置是 /var/lib/mysql。

  MySQL 在磁盘上存储系统数据库 (mysql)。

  mysql 包含诸如用户、特权、插件、帮助列表、事件、时区实现和存储例程之类的信息。

2.2.7 MySQL体系结构小结

sql 优化相关的理念

解析器 : 执行计划  数据库执行sql的一种方式

优化器 : 知道基本规则,直接影响将来选择哪个执行计划

查询缓存 : 生产环境中,一般会用redis memcached 来代替

逻辑结构

 库    就是一个目录,为了存放多张表

 表    在相应的库中,用多个文件来表示

                    myisam表 3个文件:(.myd数据文件  .myi索引文件 frm表 结构定义文件)

innodb:  2个或者一个,共享表空间(ibdata1 基表 元数据)、独立表空间(5.6以后默认的表存储方式)

如何使用磁盘

1、多个库多个目录,目录下存放了多个表的存储文件

2、  auto.cnf           db02.err           db02.pid           ibdata1             ib_logfile0       ib_logfile1                等

2.3 MySQL管理

2.3.1 连接管理:mysql

[[email protected] ~]# mysql --help
-u <user_name> 或 --host=<user_name>
-p<password>
-h <host_name> 或 --host=<host_name>
--protocol=<protocol_name>
-P <port_number> 或 --port=<port_number>
-S <socket_name> 或 --socket=<socket_name>

常用的连接方式:

套接字:  mysql -uroot -p123  -S /application/mysql/tmp/mysql.sock
Tcp/Ip: mysql -uroot -p123 -h 10.0.0.52 -P 3306

2.3.2 数据库的启动流程

  mysqld 文件属性

[[email protected] ~]# cd /application/mysql/bin/
[[email protected] bin]# file mysqld
mysqld: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped

mysql.server文件属性

[[email protected] bin]# file ../support-files/mysql.server
../support-files/mysql.server: POSIX shell script text executable

mysqld_safe文件属性

[[email protected] data]# file /application/mysql/bin/mysqld_safe
/application/mysql/bin/mysqld_safe: POSIX shell script text executable

可以看出mysql.server文件与mysqld_safe文件都是脚本文件,最后都调用mysqld二进制文件进行启动。

2.3.3 mysql的关闭方法

  推荐使用的方法:

1、mysqladmin -uroot -p123 shutdown
2、servive mysqld stop

  尽量避免使用kill命令

    mysqladmin命令关闭mysql

[[email protected] bin]# mysqladmin shutdown -uroot -p123
Warning: Using a password on the command line interface can be insecure.

  perror命令

[[email protected] bin]# perror 13
OS error code  13:  Permission denied

perror命令是mysql自带命令,能够查询mysql错误代码的含义。

2.3.4 my.cnf 配置文件说明

功能

    1、影响到服务器进程的启动

    2、影响到客户端程序

配置my.cnf

使用不同的"标签"去明确指定影响哪部分功能

服务器端

[server]
    [mysqld] -----> 一般设置此项
    [mysqld_safe]
[client]     ----> 为了方便设置此项
    [mysql]
    [mysqladmin]
    [mysqldump]

  my.cnf文件配置实例

[[email protected] data]# cat /etc/my.cnf
[mysqld]
basedir=/application/mysql
datadir=/application/mysql/data
socket=/tmp/mysql.sock
log-error=/var/log/mysql.log
port=3307
[mysql]
socket=/tmp/mysql.sock
user=root
password=123

检查进程信息,可以看到与my.cnf配置的相同

[[email protected] data]# ps -ef |grep [my]sql
root       3411   1918  0 15:52 pts/1    00:00:00 /bin/sh /application/mysql/bin/mysqld_safe
mysql      3548   3411  0 15:52 pts/1    00:00:00 /application/mysql/bin/mysqld --basedir=/application/mysql --datadir=/application/mysql/data --plugin-dir=/application/mysql/lib/plugin --user=mysql --log-error=/var/log/mysql.log --pid-file=/application/mysql/data/db02.pid --socket=/tmp/mysql.sock --port=3307

my.cnf文件的配置

2.3.5 配置文件的读取过程

/etc/my.cnf --> /etc/mysql/my.cnf --> $MYSQL_HOME/my.cnf --> defaults-extra-file=/tmp/clsn.txt --> ~/.my.cnf

  注:假设4个配置文件都存在,同时使用--defaults-extra-file指定了参数文件,如果这时有一个 "参数变量"在5个配置文件中都出现了,那么后面的配置文件中的参数变量值会覆盖前面配置文件中的参数变量值,就是说会使用 ~/.my.cnf 中设置的值

  如果使用./bin/mysqld_safe 守护进程启动mysql数据库时,使用了 --defaults-file=<配置文件的绝对路径>参数,这时只会使用这个参数指定的配置文件。

2.4 mysql多实例配置

2.4.1 什么是MySQL多实例?

  简单地说,MySQL多实例就是在一台服务器上同时开启多个不同的服务端口(如:3306/3307)同时运行多个MySQL服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供服务。

  这些MySQL多实例共用一套MySQL安装程序,使用不同的my.cnf(也可以相同)配置文件、启动程序(也可以相同)和数据文件。在提供服务时,多实例MySQL在逻辑上看来是各自独立的,他们根据配置文件对应设定值,获得服务器响应数量的资源。

2.4.2 MySQL多实例的作用与问题

有效利用服务器资源

  当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务,且可以实现资源的逻辑隔离

节约服务器资源

  当公司资金紧张,但是数据库又需要各自尽量独立地提供服务,而且,需要主从复制等技术时,多实例就再好不过了

  MySQL多实例有它的好处,但也有弊端,比如,会存在资源互相抢占的问题。当某个数据库实例并发很高或者有SQL慢查询时,整个实例会消耗大量的系统CPU、磁盘I/O等资源,导致服务器上的其他数据库实例提供服务的质量一起下降。

2.4.3 多实例配置思路

1     多套配置文件
2     多套 数据
3     多个socket
4     多个端口
5     多个日志文件
6     多个启动程序

2.4.4 多实例配置过程

前期mysql的安装与1.4MySQL的安装一致,在这里就不再重复(配置完成不要启动)

第一个里程碑:多实例配置文件准备

[[email protected] /]# tree /data/
/data/
├── 3306
│   ├── my.cnf
│   └── mysql
└── 3307
    ├── my.cnf
    └── mysql

3306端口my.cnf配置文件

[[email protected] /]# cat data/3306/my.cnf
[client]
port            = 3306
socket          = /data/3306/mysql.sock

[mysqld]
user    = mysql
port    = 3306
socket  = /data/3306/mysql.sock
basedir = /application/mysql
datadir = /data/3306/data
log-bin = /data/3306/mysql-bin
server-id = 6

[mysqld_safe]
log-error=/data/3306/mysql_3306.err
pid-file=/data/3306/mysqld.pid

3307端口my.cnf配置文件

[[email protected] /]# cat  /data/3307/my.cnf
[client]
port            = 3307
socket          = /data/3307/mysql.sock

[mysqld]
user    = mysql
port    = 3307
socket  = /data/3307/mysql.sock
basedir = /application/mysql
datadir = /data/3307/data
log-bin = /data/3307/mysql-bin
server-id = 7

[mysqld_safe]
log-error=/data/3307/mysql_3307.err
pid-file=/data/3307/mysqld.pid

编写管理脚本3306

 1 [[email protected] /]# cat data/3306/mysql
 2 #!/bin/sh
 3 #3306 start scripts
 4 #init
 5 port=3306
 6 mysql_user="root"
 7 CmdPath="/application/mysql/bin"
 8 mysql_sock="/data/${port}/mysql.sock"
 9 mysqld_pid_file_path=/data/3306/3306.pid
10 start(){
11     if [ ! -e "$mysql_sock" ];then
12          printf "Starting MySQL...\n"
13         /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf --pid-file=$mysqld_pid_file_path 2>&1 > /dev/null &
14         sleep 3
15     else
16         printf "MySQL is running...\n"
17         exit 1
18     fi
19 }
20 stop(){
21     if [ ! -e "$mysql_sock" ];then
22         printf "MySQL is stopped...\n"
23         exit 1
24     else
25         printf "Stoping MySQL...\n"
26         mysqld_pid=`cat "$mysqld_pid_file_path"`
27          if (kill -0 $mysqld_pid 2>/dev/null)
28            then
29              kill $mysqld_pid
30              sleep 2
31          fi
32     fi
33 }
34
35 restart(){
36     printf "Restarting MySQL...\n"
37     stop
38     sleep 2
39     start
40 }
41
42 case "$1" in
43     start)
44         start
45     ;;
46     stop)
47         stop
48     ;;
49     restart)
50         restart
51     ;;
52     *)
53         printf "Usage: /data/${port}/mysql {start|stop|restart}\n"
54 esac

mysql 多实例 启动脚本

编写管理脚本3307

 1 [[email protected] /]# cat data/3307/mysql
 2 #!/bin/sh
 3 #3307 start scripts
 4 #init
 5 port=3307
 6 mysql_user="root"
 7 CmdPath="/application/mysql/bin"
 8 mysql_sock="/data/${port}/mysql.sock"
 9 mysqld_pid_file_path=/data/3307/3307.pid
10 start(){
11     if [ ! -e "$mysql_sock" ];then
12          printf "Starting MySQL...\n"
13         /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf --pid-file=$mysqld_pid_file_path 2>&1 > /dev/null &
14         sleep 3
15     else
16         printf "MySQL is running...\n"
17         exit 1
18     fi
19 }
20 stop(){
21     if [ ! -e "$mysql_sock" ];then
22         printf "MySQL is stopped...\n"
23         exit 1
24     else
25         printf "Stoping MySQL...\n"
26         mysqld_pid=`cat "$mysqld_pid_file_path"`
27          if (kill -0 $mysqld_pid 2>/dev/null)
28            then
29              kill $mysqld_pid
30              sleep 2
31          fi
32     fi
33 }
34
35 restart(){
36     printf "Restarting MySQL...\n"
37     stop
38     sleep 2
39     start
40 }
41
42 case "$1" in
43     start)
44         start
45     ;;
46     stop)
47         stop
48     ;;
49     restart)
50         restart
51     ;;
52     *)
53         printf "Usage: /data/${port}/mysql {start|stop|restart}\n"
54 esac

mysql 多实例 启动脚本

  注意脚本要给继续权限才能够正常使用

第二个里程碑:创建数据目录并授权

[[email protected] /]# mkdir /data/{3306,3307}/data -p
[[email protected] /]# chown -R mysql.mysql /data/

第三个里程碑:初始化数据

cd /application/mysql/scripts  && ./mysql_install_db  --defaults-file=/data/3306/my.cnf --basedir=/application/mysql --datadir=/data/3306/data --user=mysql
./mysql_install_db  --defaults-file=/data/3307/my.cnf --basedir=/application/mysql --datadir=/data/3307/data --user=mysql

第四个里程碑:创建日志文件

    #5.6.40特殊性:需要创建错误日志文件

touch /data/3306/mysql_3306.err
touch /data/3307/mysql_3307.err

第五个里程碑:启动多实例

[[email protected] scripts]# /data/3306/mysql start
Starting MySQL...
[[email protected] scripts]# /data/3307/mysql start
Starting MySQL...

检查mysql状态

[[email protected] scripts]# ps -ef |grep [my]sql
root       4341      1  0 16:46 pts/1    00:00:00 /bin/sh /application/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf --pid-file=/data/3306/3306.pid
mysql      4526   4341 13 16:46 pts/1    00:00:03 /application/mysql/bin/mysqld --defaults-file=/data/3306/my.cnf --basedir=/application/mysql --datadir=/data/3306/data --plugin-dir=/application/mysql/lib/plugin --user=mysql --log-error=/data/3306/mysql_3306.err --pid-file=/data/3306/3306.pid --socket=/data/3306/mysql.sock --port=3306
root       4549      1  0 16:46 pts/1    00:00:00 /bin/sh /application/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf --pid-file=/data/3307/3307.pid
mysql      4734   4549 51 16:46 pts/1    00:00:08 /application/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf --basedir=/application/mysql --datadir=/data/3307/data --plugin-dir=/application/mysql/lib/plugin --user=mysql --log-error=/data/3307/mysql_3307.err --pid-file=/data/3307/3307.pid --socket=/data/3307/mysql.sock --port=3307

检查端口信息

[[email protected] scripts]# netstat  -lntup |grep mysql
tcp        0      0 :::3306                     :::*                        LISTEN      4526/mysqld
tcp        0      0 :::3307                     :::*                        LISTEN      4734/mysqld

  至此mysql的多实例就配置完成

2.4.5 多实例mysql的使用

本地连接方式

mysql -S /data/3306/mysql.sock
mysql -S /data/3307/mysql.sock

2.4.6 关于mysql多实例的选择

1、资金紧张性公司的选择
  资金紧张,公司业务访问量又不大,但又希望不同的业务的数据库服务各自尽量独立
2、并发访问不是特别大的业务
  当公司业务访问量不太大的时候,服务器的资源基本都是浪费的,这就适合多实例的使用
3、门户网站应用MySQL多实例场景
  配置硬件好的服务器,可以节省IDC机柜空间,跑多实例也不会减少硬件资源不慢的浪费
  一般是从库多实例,例如:某部门使用IBM服务器为48核CPU,内存96GB、一台服务器跑3~4个实例:此外,sina网也是用的多实例,内存48GB左右。企业环境中一般将多实例应用在测试环境。

2.5 mysql忘记密码怎么办?

  第一步:将服务停掉

/etc/init.d/mysqld stop

  第二步:加参数启动服务

cd /application/mysql/bin/
mysqld_safe --skip-grant-table --user=mysql --skip-networking &

  这种模式下
    无密码登陆
    网络用户无法登陆
    只能本地登陆
    和授权有关的命令都无法执行

  第三步:修改密码

[[email protected] 3306]# mysql
mysql> update mysql.user set password=password(‘123‘) where user=‘root‘ and host=‘localhost‘;
mysql> flush privileges;

    MYSQL5.7 修改密码修改字段  authentication_string

  第四步:退出重启服务

/etc/init.d/mysqld restart

  第五步:登录验证

mysql -uroot -p123

  至此密码修改成功

2.6 参考文献

https://zh.wikipedia.org/wiki/MySQL#%E6%AD%B7%E5%8F%B2  mysql历史
http://blog.51cto.com/oldboy/1728380   MySQL常见错误代码(error code)及代码说明
https://www.abcdocker.com/abcdocker/28   MySQL入门介绍
https://www.abcdocker.com/abcdocker/90   MySQL多实例
http://oldboy.blog.51cto.com    脚本来源

原文地址:https://www.cnblogs.com/langqi250/p/9932837.html

时间: 2024-08-04 17:44:04

【转】数据库介绍(MySQL安装 体系结构、基本管理)的相关文章

Mysql数据库介绍、安装和配置文件

Mysql数据库介绍.安装和配置文件 MySQL数据库介绍 mysql是开源关系型数据库,遵循GPL协议. mysql的特点是性能卓越且服务稳定,开源,无版本限制,成本低,单进程多线程,多用户,基于C/S(客户端/服务端)架构,安全可靠,插入式存储引擎. mysql的另个版本为MariaDB,MariaDB是单进程,多线程的,提供了诸多扩展和新特性,提供了较多测试组件并且同样开源. mysql系统结构 一.逻辑模块组成 MySQL 可以看成是二层架构. 第一层我们通常叫做SQL Layer,在M

LAMP架构介绍Mysql安装

LAMP架构介绍 MySQL和MariDB介绍 MySql安装 mysql解压缩 mv目录并且更改名字 创建mysql 针对以上4个dumper全部安装,安装依赖包 启动文件 使用默认的mysql的配置文件 启动脚本 对脚本文件进行编辑 将mysql服务加入到开机启动和分配权限 启动服务 启动进程与端口 另外mysql启动方式: 关闭mysql 原文地址:http://blog.51cto.com/wbyyy/2073300

数据库介绍(MySQL安装 体系结构、基本管理)

阅读目录 1.1 数据库简介 1.2 数据库相关产品 1.3 Mysql简介 1.4 mysql数据库的安装 1.5 mysql 5.7版本安装说明 2.1 客户端与服务器端模型 2.2 Mysqld服务的构成 2.3 MySQL管理 2.4 mysql多实例配置 2.5 mysql忘记密码怎么办? 2.6 参考文献 第1章 数据库介绍及mysql安装 回到顶部 1.1 数据库简介 数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增.截取.更新.删除等操作

Linux学习之路--MySQL(1)数据库介绍及安装方法【18】---20180117

一.数据库的发展史简要 1.数据库的发展史 萌芽阶段-----文件系统使用磁盘文件来存储数据 初级阶段-----第一代数据库出现了网状模型.层次模型的数据库 中级阶段-----第二代数据库关系型数据库和结构化查询语言 高级阶段-----新一代数据库"关系-对象"型数据库 2.文件管理系统的缺点 编写应用程序不方便 数据冗余不可避免 应用程序依赖性 不支持对文件的并发访问 数据间联系弱 难以按用户视图表示数据 无安全控制功能 3.数据的时代 涉及的数据量大 数据不随程序的结束而消失 数据

MySQL数据库(1)_MySQL数据库介绍与安装

一.数据库相关概念的简介 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据库中的数据按一定的数学模型组织.描述和存储,具有较小的冗余,较高的数据独立性和易扩展性,并可为各种用户共享. 数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立.使用和维护数据库,简称DBMS.它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性.用户通过DBMS访问数据库中的数据,数据库管理员也通过dbms进行

Mysql 数据库 介绍与安装

目录 一.数据库是什么? 二.为什么使用数据库 三.数据库分类 - 关系型数据库 二. 非关系型数据库 最大的区别: 四.MySQL 架构 类似于socket的客户端和服务端 五.mysql的安装: Windows下的安装: 六.初始mysql SQL 指令: 一.数据库是什么? ? 字面意思:存数据的仓库 二.为什么使用数据库 ? 之前使用的是Excel管理数据 ? xcel的缺点: ? 管理不了大量的数据 (10W量级的数据) ? 并发操作同一个数据表格 ? 数据支持高级的操作, 比如:分组

数据库介绍-1MySQL安装

第1章 数据库介绍及mysql安装 1.1 数据库简介 数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增.截取.更新.删除等操作. 所谓“数据库”系以一定方式储存在一起.能予多个用户共享.具有尽可能小的冗余度.与应用程序彼此独立的数据集合. 1.1.1 什么是数据 数据是指对客观事件进行记录并可以鉴别的符号,是对客观 事物的性质.状态以及相互关系等进行记载的物理符号或这些物 理符号的组合.它是可识别的.抽象的符号. 1.1.2 数据库管理系统 非关系型数

数据库介绍(mysql)

数据库简介: 关系型数据库RDBMS : 关系型数据库模型是把复杂的数据结构归结为简单的二元关系 1)Oracle数据库 比较完善,功能最强大,收费 2)Mysql数据库 体积小,速度快,总体拥有成本低,开源不收费 3)MariaDB数据库 是Mysql数据库的一个分支 4)Sql Sever数据库 微软开发,只能在Windows下运行 5)Access数据库 入门级小型桌面数据库,性能安全性都很一般,可供个人管理或小型企业使用 非关系型数据库 NoSQL 1)键值(Key-Value)存储数据

01.数据库介绍与安装

数据库介绍 1.什么是数据库 ? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库. 2.MySQL 关系型数据库管理系统Relational Database Management System 3.数据库的分类 关系型:如sqllite,db2,oracle,access,sql server,MySQL 非关系型:mongodb,redis,memcache 注意:sql语句通用 总结两句话: 关系型数据库需要有表结构 非关系型数据库是key-value存储的,没有表结