数据库介绍(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平台
- ,4线小公司,传统行业在用
IBM :DB2数据库
市场占有量小
目前只有:国有银行(人行、中国银行、工商银行等)、中国移动应用。
下面三者广泛应用在大型互联网公司
- PostgreSQL
- MongoDB
- Redis
1.3 Mysql简介
1.3.1 mysql数据库发展史
- 1979年,报表工具Unireg出现。
- 年,以瑞典David Axmark 为首,成立了一家公司(AB前身),IASM引擎出现。
- 1990年,提供SQL支持。
- -2000年,MySQL AB公司成立,并公布源码,开源化。
- 2000年4月BDB引擎出现,支持事务。
- 2008年1月16日,Sun(太阳微系统)正式收购MySQL。
- 2009年4月20日,甲骨文公司宣布以每股9.50美元,74亿美元的总额收购Sun电脑公司,MySQL 转入Oracle 门下。
- 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数据库建议:
- ) 稳定版:选择开源的社区版的稳定版GA版本
- ) 产品线:可以选择5.1或5. 互联网公司主流5.,其次是5.1和5.
- ) 选择MySQL数据库GA版发布后6个月以上的GA版本。
- )要选择前后几个月没有大的BUG修复的版本,而不是大量修复BUG的集中版本
- )最好向后较长时间没有更新发布的版本
- )要考虑开发人员开发程序使用的版本是否兼容你选的版本
- )作为内部开发人员开发测试数据库环境,跑大概3-6个月的事件
- )优先企业非核心业务采用新版本的数据库GA版本软件
- )向DBA高手请教,或者在及技术氛围好的群里和大家一起交流,使用真正的高手们用过的好用的GA版本产品
- )若是没有重要的功能BUG或性能瓶颈,则可以开始考虑作为任何任务数据服务的后端数据库软件
1.4 mysql数据库的安装
1.4.1 系统环境说明
- [root@db02 ~]# cat /etc/redhat-release
- CentOS release 6.9 (Final)
- [root@db02 ~]# uname -r
- 2.6.-.el6.x86_64
- [root@db02 ~]# /etc/init.d/iptables status
- iptables: Firewall is not running.
- [root@db02 ~]# getenforce
- Disabled
- [root@db02 ~]# 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= \
- -DWITH_FEDERATED_STORAGE_ENGINE= \
- -DWITH_BLACKHOLE_STORAGE_ENGINE= \
- -DWITHOUT_EXAMPLE_STORAGE_ENGINE= \
- -DWITH_ZLIB=bundled \
- -DWITH_SSL=bundled \
- -DENABLED_LOCAL_INFILE= \
- -DWITH_EMBEDDED_SERVER= \
- -DENABLE_DOWNLOADS= \
- -DWITH_DEBUG=
- 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 /etc/init.d/mysqld
添加环境变量,使用mysql命令
- echo 'PATH=/application/mysql/bin/:$PATH' >>/etc/profile
- tail - /etc/profile
- source /etc/profile
- echo $PATH
- mysql
1.4.4 数据库安全设置
设置root用户密码
- mysqladmin -u root password ''
- 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版本安装说明
主机系统环境说明
- [root@db13 ~]# cat /etc/redhat-release
- CentOS release 6.9 (Final)
- [root@db13 ~]# uname -r
- 2.6.-.el6.x86_64
- [root@db13 ~]# getenforce
- Disabled
- [root@db13 ~]# /etc/init.d/iptables status
- iptables: Firewall is not running.
- [root@db13 ~]# 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.-linux-glibc2.-x86_64.tar.gz
将软件移动到程序目录,创建软连接
- mkdir -p /application/
- mv mysql-5.7.-linux-glibc2.-x86_64 /application/mysql-5.7.
- ln -s /application/mysql-5.7. /application/mysql
添加mysql用户,并进行授权
- useradd -M -s /sbin/nologin -u mysql
- chown -R mysql.mysql /application/mysql-5.7.
初始化数据库
- /application/mysql-5.7./bin/mysqld --initialize --user=mysql --basedir=/application/mysql-5.7. --datadir=/application/mysql-5.7./data
初始化时注意最后一行输出root密码
- --13T08::.760309Z [Note] A temporary password is generated for root@localhost: )*1E7=fYd&>i
拷贝配置文件和启动文件
- \cp /application/mysql-5.7./support-files/my-default.cnf /etc/my.cn
- \cp \application/mysql-5.7./support-files/mysql.server /etc/init.d/mysqld
# 修改启动文件内容(配置目录)
将程序安装到 /usr/local/ 下 可以省略这步操作
- sed 's#/usr/local#/application#g' /application/mysql-5.7./bin/mysqld_safe /etc/init.d/mysqld -i
启动mysql
- [root@db13 tools]# /etc/init.d/mysqld start
- Starting MySQL.Logging to '/application/mysql/data/db13.err'.
- SUCCESS!
- [root@db13 tools]# /etc/init.d/mysqld status
- SUCCESS! MySQL running ()
添加环境变量
- echo 'PATH=/application/mysql/bin/:$PATH' >>/etc/profile
- tail - /etc/profile
- source /etc/profile
- echo $PATH
修改mysql密码
- [root@db13 tools]# mysqladmin -uroot -p password
- 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
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;
- 、判断语法、语句、语义
- 判断语句类型
- 、数据库不能直接响应sql语句
- 必须明确的知道数据在哪个磁盘
- 、数据库对象授权情况判断
- 授权失败不继续
- 、解析(解析器)
- 将sql语句解析成执行计划,运行执行计划,生成找数据的方式
- 、优化 (优化器)
- 运行执行计划
- .6之后 基于代价的算法,从执行计划中选择代价最小的交给"执行器"
- 、"执行器"
- 运行执行计划
- 最终生产如何去磁盘找数据方式
- 、将取数据的方式,交由下层(存储引擎层)进行处理
- 、最终将取出的数据抽象成管理员或用户能看懂的方式(表),展现在用户面前
- 、查询缓存: 缓存之前查询的数据。
- 假如我们查询的表是一个经常有变动的表,查询缓存不要设置太大
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
- [root@db02 ~]# 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
2.3.2 数据库的启动流程
mysqld 文件属性
- [root@db02 ~]# cd /application/mysql/bin/
- [root@db02 bin]# file mysqld
- mysqld: ELF -bit LSB executable, x86-, version (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6., not stripped
mysql.server文件属性
- [root@db02 bin]# file ../support-files/mysql.server
- ../support-files/mysql.server: POSIX shell script text executable
mysqld_safe文件属性
- [root@db02 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的关闭方法
推荐使用的方法:
- 、mysqladmin -uroot -p123 shutdown
- 、servive mysqld stop
尽量避免使用kill命令
mysqladmin命令关闭mysql
- [root@db02 bin]# mysqladmin shutdown -uroot -p123
- Warning: Using a password on the command line interface can be insecure.
perror命令
- [root@db02 bin]# perror
- OS error code : Permission denied
perror命令是mysql自带命令,能够查询mysql错误代码的含义。
2.3.4 my.cnf 配置文件说明
功能 :
1、影响到服务器进程的启动
2、影响到客户端程序
配置my.cnf
使用不同的"标签"去明确指定影响哪部分功能
服务器端
- [server]
- [mysqld] -----> 一般设置此项
- [mysqld_safe]
- [client] ----> 为了方便设置此项
- [mysql]
- [mysqladmin]
- [mysqldump]
my.cnf文件配置实例
- [root@db02 data]# cat /etc/my.cnf
- [mysqld]
- basedir=/application/mysql
- datadir=/application/mysql/data
- socket=/tmp/mysql.sock
- log-error=/var/log/mysql.log
- port=
- [mysql]
- socket=/tmp/mysql.sock
- user=root
- password=
检查进程信息,可以看到与my.cnf配置的相同
- [root@db02 data]# ps -ef |grep [my]sql
- root : pts/ :: /bin/sh /application/mysql/bin/mysqld_safe
- mysql : pts/ :: /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=
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 多实例配置思路
- 多套配置文件
- 多套 数据
- 多个socket
- 多个端口
- 多个日志文件
- 多个启动程序
2.4.4 多实例配置过程
前期mysql的安装与1.4MySQL的安装一致,在这里就不再重复(配置完成不要启动)
第一个里程碑:多实例配置文件准备
- [root@db02 /]# tree /data/
- /data/
- ├──
- │ ├── my.cnf
- │ └── mysql
- └──
- ├── my.cnf
- └── mysql
3306端口my.cnf配置文件
- [root@db02 /]# cat data//my.cnf
- [client]
- port =
- socket = /data//mysql.sock
- [mysqld]
- user = mysql
- port =
- socket = /data//mysql.sock
- basedir = /application/mysql
- datadir = /data//data
- log-bin = /data//mysql-bin
- server-id =
- [mysqld_safe]
- log-error=/data//mysql_3306.err
- pid-file=/data//mysqld.pid
3307端口my.cnf配置文件
- [root@db02 /]# cat /data//my.cnf
- [client]
- port =
- socket = /data//mysql.sock
- [mysqld]
- user = mysql
- port =
- socket = /data//mysql.sock
- basedir = /application/mysql
- datadir = /data//data
- log-bin = /data//mysql-bin
- server-id =
- [mysqld_safe]
- log-error=/data//mysql_3307.err
- pid-file=/data//mysqld.pid
编写管理脚本3306
- [root@db02 /]# cat data//mysql
- #!/bin/sh
- # start scripts
- #init
- port=
- mysql_user="root"
- CmdPath="/application/mysql/bin"
- mysql_sock="/data/${port}/mysql.sock"
- mysqld_pid_file_path=/data//.pid
- start(){
- if [ ! -e "$mysql_sock" ];then
- printf "Starting MySQL...\n"
- /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf --pid-file=$mysqld_pid_file_path >& > /dev/null &
- sleep
- else
- printf "MySQL is running...\n"
- exit
- fi
- }
- stop(){
- if [ ! -e "$mysql_sock" ];then
- printf "MySQL is stopped...\n"
- exit
- else
- printf "Stoping MySQL...\n"
- mysqld_pid=`cat "$mysqld_pid_file_path"`
- if (kill - $mysqld_pid >/dev/null)
- then
- kill $mysqld_pid
- sleep
- fi
- fi
- }
- restart(){
- printf "Restarting MySQL...\n"
- stop
- sleep
- start
- }
- case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- restart)
- restart
- ;;
- *)
- printf "Usage: /data/${port}/mysql {start|stop|restart}\n"
- esac
mysql 多实例 启动脚本
编写管理脚本3307
- [root@db02 /]# cat data//mysql
- #!/bin/sh
- # start scripts
- #init
- port=
- mysql_user="root"
- CmdPath="/application/mysql/bin"
- mysql_sock="/data/${port}/mysql.sock"
- mysqld_pid_file_path=/data//.pid
- start(){
- if [ ! -e "$mysql_sock" ];then
- printf "Starting MySQL...\n"
- /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf --pid-file=$mysqld_pid_file_path >& > /dev/null &
- sleep
- else
- printf "MySQL is running...\n"
- exit
- fi
- }
- stop(){
- if [ ! -e "$mysql_sock" ];then
- printf "MySQL is stopped...\n"
- exit
- else
- printf "Stoping MySQL...\n"
- mysqld_pid=`cat "$mysqld_pid_file_path"`
- if (kill - $mysqld_pid >/dev/null)
- then
- kill $mysqld_pid
- sleep
- fi
- fi
- }
- restart(){
- printf "Restarting MySQL...\n"
- stop
- sleep
- start
- }
- case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- restart)
- restart
- ;;
- *)
- printf "Usage: /data/${port}/mysql {start|stop|restart}\n"
- esac
mysql 多实例 启动脚本
注意脚本要给继续权限才能够正常使用
第二个里程碑:创建数据目录并授权
- [root@db02 /]# mkdir /data/{,}/data -p
- [root@db02 /]# chown -R mysql.mysql /data/
第三个里程碑:初始化数据
- cd /application/mysql/scripts && \
- ./mysql_install_db --defaults-file=/data//my.cnf --basedir=/application/mysql --datadir=/data//data --user=mysql
- ./mysql_install_db --defaults-file=/data//my.cnf --basedir=/application/mysql --datadir=/data//data --user=mysql
第四个里程碑:创建日志文件
#5.6.40特殊性:需要创建错误日志文件
- touch /data//mysql_3306.err
- touch /data//mysql_3307.err
第五个里程碑:启动多实例
- [root@db02 scripts]# /data//mysql start
- Starting MySQL...
- [root@db02 scripts]# /data//mysql start
- Starting MySQL...
检查mysql状态
- [root@db02 scripts]# ps -ef |grep [my]sql
- root : pts/ :: /bin/sh /application/mysql/bin/mysqld_safe --defaults-file=/data//my.cnf --pid-file=/data//.pid
- mysql : pts/ :: /application/mysql/bin/mysqld --defaults-file=/data//my.cnf --basedir=/application/mysql --datadir=/data//data --plugin-dir=/application/mysql/lib/plugin --user=mysql --log-error=/data//mysql_3306.err --pid-file=/data//.pid --socket=/data//mysql.sock --port=
- root : pts/ :: /bin/sh /application/mysql/bin/mysqld_safe --defaults-file=/data//my.cnf --pid-file=/data//.pid
- mysql : pts/ :: /application/mysql/bin/mysqld --defaults-file=/data//my.cnf --basedir=/application/mysql --datadir=/data//data --plugin-dir=/application/mysql/lib/plugin --user=mysql --log-error=/data//mysql_3307.err --pid-file=/data//.pid --socket=/data//mysql.sock --port=
检查端口信息
- [root@db02 scripts]# netstat -lntup |grep mysql
- tcp ::: :::* LISTEN /mysqld
- tcp ::: :::* LISTEN /mysqld
至此mysql的多实例就配置完成
2.4.5 多实例mysql的使用
本地连接方式
- mysql -S /data//mysql.sock
- mysql -S /data//mysql.sock
2.4.6 关于mysql多实例的选择
- 、资金紧张性公司的选择
- 资金紧张,公司业务访问量又不大,但又希望不同的业务的数据库服务各自尽量独立
- 、并发访问不是特别大的业务
- 当公司业务访问量不太大的时候,服务器的资源基本都是浪费的,这就适合多实例的使用
- 、门户网站应用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 &
这种模式下
无密码登陆
网络用户无法登陆
只能本地登陆
和授权有关的命令都无法执行
第三步:修改密码
- [root@db02 ]# mysql
- mysql> update mysql.user set password=password('') 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 脚本来源
数据库介绍(MySQL安装 体系结构、基本管理)的更多相关文章
- python 全栈开发,Day60(MySQL的前戏,数据库概述,MySQL安装和基本管理,初识MySQL语句)
一.MySQL的前戏 在学习Mysql之前,我们先来想一下一开始做的登录注册案例,当时我们把用户的信息保存到一个文件中: #用户名 |密码 root|123321 alex|123123 上面文件内容 ...
- 【转】数据库介绍(MySQL安装 体系结构、基本管理)
[转]数据库介绍(MySQL安装 体系结构.基本管理) 第1章 数据库介绍及mysql安装 1.1 数据库简介 数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新 ...
- Mysql数据库介绍、安装和配置文件
Mysql数据库介绍.安装和配置文件 MySQL数据库介绍 mysql是开源关系型数据库,遵循GPL协议. mysql的特点是性能卓越且服务稳定,开源,无版本限制,成本低,单进程多线程,多用户,基于C ...
- mysql 安装与基本管理
目录 mysql 安装与基本管理 MySQL介绍 下载安装 登录设置密码 破解密码 统一字符编码 mysql参数配置 mysql 常用指令 mysql 安装与基本管理 MySQL介绍 MySQL是一个 ...
- MySql安装和基本管理&mysql语句
MySql安装和基本管理 本章内容: mysql的安装.启动 mysql破解密码 统一字符编码 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下 ...
- Mysql初识数据库《四》mysql安装与基本管理
一.MySQL介绍 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是 ...
- MySQL数据库(1)_MySQL数据库介绍与安装
一.数据库相关概念的简介 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据库中的数据按一定的数学模型组织.描述和存储,具有较小的冗余,较高的数据独立性和易扩展 ...
- 短信登录与注册接口、前端所有方式登录注册页面、redis数据库介绍与安装
今日内容概要 短信登陆接口 短信注册接口 登陆注册前端 redis介绍和安装 内容详细 1.短信登陆接口 在视图类 user/views.py中修改并添加: from .serializer impo ...
- 1-[Mysql]-数据库介绍及安装
1.数据库概述 1.数据库服务器: 运行数据库管理软件的计算机 2.数据库管理软件:mysql oracle db2 sqlserver 3.库:文件夹 4.表:文件 5.记录:事物的一系列典型特征: ...
随机推荐
- Bluetooth Obex
OPP 1.2 which uses OBEX over L2CAP. OPP 1.1 connection and transfer happens over RFCOMM->L2CAP.
- 使用jQuery判断元素是否在可视区域
$("#app").offset().top; offset().top表示 绝对偏移值,比如说有一个很长的页面,#app这个元素 在最底下, $("#app" ...
- getSystemService详解
android的后台运行在很多service,它们在系统启动时被SystemServer开启,支持系统的正常工作,比如MountService监听是否有SD卡安装及移除,ClipboardServi ...
- Windows环境下多线程编程原理与应用读书笔记(5)————互斥及其应用
<一>互斥的同步机制 思想:当一个线程获得互斥量了后,其他所有要获取同一个互斥量的线程都处于阻塞状态,直到第一个线程释放互斥量为止. 设想几个线程竞争同一个互斥量,其中一个线程获得了互斥量 ...
- Django 模板中 include 标签使用小结
include 标签允许在模板中包含其它的模板的内容. 标签的参数是所要包含的模板名称,可以是一个变量,也可以是用单/双引号硬编码的字符串. 每当在多个模板中出现相同的代码时,就应该考虑是否要使用 { ...
- defaultView and parentWindow
defaultView 只读的 which is used to represent the currently rendered view of the document 返回的值通常是包含 ...
- WPF TextBox按字节长度限制输入
前两天做一个项目的时候,由于页面没有限制TextBox的输入长度,所以,后台直接报错了,超出数据库最大的长度. 数据库的长度是按照字节来计算的,而且不同的编码格式,汉字占用的字节长度又不相同,比如,我 ...
- Problem D: 来开个书店吧
某出版社可出版图书和磁带.其中图书按照每页的价格乘以页数进行定价,磁带根据每10分钟的价格乘以磁带录音的分钟数进行定价.请定义Publicatioin.Book.Tape以及BookStore四个类. ...
- Servlet的理解
一.什么是Servlet? Servlet是用Java编写的web组件,实际上可以简单的理解为是用来处理请求的,为什么这么说,看了它的生命周期就知道了. 二.常见的Servlet容器 4容器顾名思义是 ...
- 必须先将 ContentLength 字节写入请求流,然后再调用 [Begin]GetResponse。解决方法
当在后台实现POST请求的时候,出现如下错误: 必须先将 ContentLength 字节写入请求流,然后再调用 [Begin]GetResponse. 或者是如下错误: 上述是因为由于我们使用的是代 ...