简介

MySQL是一个真正的多用户、多线程SQL数据库服务器。SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言,它使得存储、更新和存取信息更加容易。MySQL是一个客户机/服务器结构的实现,它由一个服务器守护程序mysqld和许多不同的客户程序以及库组成的。分为关系数据库(mysql、sqlserver、oracle)和非关系型数据库(redis)。

关系型数据库

库中的数据二维表的方式存储

一.概念

关系:存储数据的表的表名

元组:就是表中的一条记录(一行就是一条记录)

属性:就是表中的一个字段(一列就是一个字段)

域:字段的取值范围

关键字:可以唯一标识一条记录的字段(这也是一个或多个字段)

关系模型:表和表之间的关系

二.关系型数据库的优点

1. 容易理解

2. 可以借助于sql语句来进行数据的读写

3. 便于维护表中的数据(主要用于保证数据完整、数据一致)

三.关系型数据库的缺点

1. 事务一致性(数据一致性)

为了保证数据的完整,会带来额外的开销,导致性能降低

2. 关系型数据库在高并发的读写请求下,会程序系统的性能瓶颈

3. 可扩展性

拆分,分库,分表

4. 读写的时效性

金融:对时效性往往要求不高

web,社交网络:对时效要较高

5. 需要写复杂的SQL,甚至需要用多表联合查询

非关系型数据库(NoSQL)

NoSQL Not Only SQL

通常是作为关系型数据库的一个补充,而且不遵循ACID

通常NoSQL是以key-value的方式存储

一.特点

性能相比关系型数据库更好

更易于扩展

二.非关系型数据库的分类

类型1:key-value

借助于hash表实现快速读写

特点:简单、容易部署、高并发状态下性能好

产品:

redis:内存+磁盘

memcached:纯内存的数据库

类型2:列式存储数据库

Column Family(列簇)

通常场景:用来实现分布式海量数据存储

产品:

HBbase

Cassandra

类型3:面向文档的数据库

数据库中所存放的是文档

产品:

MongoDB

类型4:图形数据库

graph

选择mysql理由

1. BAT都在用mysql,而且往往都是从oracle切换到了mysql

2. 性能好,而且稳定

3. 开源

4. 社区活跃

5. 轻量级

6. 维护简单

7. 支持跨平台

8. 支持多种语言(编码)

9. 执行用sql进行数据的读写

mysql的版本

社区版:社区人员自行维护的版本,没有售后

商业版:各种功能都是经过官方测试稳定,而且有完善的售后服务

mysql发行版本

Alpha版

beta版

RC版

GA版

mysql的产品线

第一条:5.0-5.1,5.1稳定版

第二条:5.4-5.7,5.5 5.7稳定

第三条:6.0 7.0 8.0 ,最新8.0

生产环境中如何选择版本

1. 选择社区版

2. 选择稳定版

3. 建议选择发布时间在6个月以上的稳定

4. 关注版本最近是否有修复补丁

5. 注意是否和开发人员使用的数据兼容

6. 注意是否和现有数据库兼容

7. 现版本的数据库就建议在内部测试运行3-6个月以上

8. 在从原有数据库转移数据的过程中,建议先转移非核心数据,测试是否正常

安装mysql(通用二进制格式)

第一步:准备mysql的配置文件(不再提供配置文件模版)

    # mv /root/my.cnf /etc/            <<my.cnf需要自己准备,可以复制下方提供的my.cnf文件
说明:
安装位置:/usr/local/mysql
数据位置: /data/mysql/mysql3306/data
临时文件位置:/data/mysql/mysql3306/tmp
日志文件位置:/data/mysql/mysql3306/logs/mysql-bin
socket文件位置:/tmp/mysql3306.sock

my.cnf文件

 #my.cnf
[client]
port =
socket = /tmp/mysql3306.sock [mysql]
prompt="\\u@\\h:\\p [\\d]>"
#pager="less -i -n -S"
#tee=/opt/mysql/query.log
no-auto-rehash [mysqld]
#misc
user = mysql
basedir = /usr/local/mysql
datadir = /data/mysql/mysql3306/data
port =
socket = /tmp/mysql3306.sock
event_scheduler = tmpdir = /data/mysql/mysql3306/tmp
#timeout
interactive_timeout =
wait_timeout = #character set
character-set-server = utf8 open_files_limit =
max_connections =
max_connect_errors =
lower_case_table_names = #symi replication #rpl_semi_sync_master_enabled=
#rpl_semi_sync_master_timeout= # second
#rpl_semi_sync_slave_enabled= #logs
log-output=file
slow_query_log =
slow_query_log_file = slow.log
log-error = error.log
log_warnings =
pid-file = mysql.pid
long_query_time =
#log-slow-admin-statements =
#log-queries-not-using-indexes =
log-slow-slave-statements = #binlog
#binlog_format = STATEMENT
binlog_format = row
server-id =
log-bin = /data/mysql/mysql3306/logs/mysql-bin
binlog_cache_size = 4M
max_binlog_size = 256M
max_binlog_cache_size = 1M
sync_binlog =
expire_logs_days =
#procedure
log_bin_trust_function_creators= #
gtid-mode = on
enforce-gtid-consistency= #relay log
skip_slave_start =
max_relay_log_size = 128M
relay_log_purge =
relay_log_recovery =
relay-log=relay-bin
relay-log-index=relay-bin.index
log_slave_updates
#slave-skip-errors=,,
#skip-grant-tables #buffers & cache
table_open_cache =
table_definition_cache =
table_open_cache = max_heap_table_size = 96M
sort_buffer_size = 128K
join_buffer_size = 128K
thread_cache_size =
query_cache_size =
query_cache_type =
query_cache_limit = 256K
query_cache_min_res_unit =
thread_stack = 192K
tmp_table_size = 96M
key_buffer_size = 8M
read_buffer_size = 2M
read_rnd_buffer_size = 16M
bulk_insert_buffer_size = 32M #myisam
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = #innodb
innodb_buffer_pool_size = 100M
innodb_buffer_pool_instances =
innodb_data_file_path = ibdata1:100M:autoextend
innodb_flush_log_at_trx_commit =
innodb_log_buffer_size = 8M
innodb_log_file_size = 100M
innodb_log_files_in_group =
innodb_max_dirty_pages_pct =
innodb_file_per_table =
innodb_rollback_on_timeout
innodb_status_file =
innodb_io_capacity =
transaction_isolation = READ-COMMITTED
innodb_flush_method = O_DIRECT

第二步:安装mysql

    # groupadd mysql
# useradd -r -g mysql -s /sbin/nologin mysql
# tar xf /root/mysql-5.7.-linux-glibc2.-x86_64.tar.gz
# mv mysql-5.7.-linux-glibc2.-x86_64 /usr/local/
# cd /usr/local
# ln -sv mysql-5.7.-linux-glibc2.-x86_64/ mysql
# chown mysql.mysql mysql -R

第三步:创建相关目录

    # mkdir /data/mysql/mysql3306/{data,tmp,logs} -pv
# chown -R mysql.mysql /data

第四步:初始化

    生成mysql的系统表和库)
# /usr/local/mysql/bin/mysqld --initialize --user=mysql
说明:
. --user是用于指定以哪个用户的身份完成初始化工作(默认从配置文件中读取)
. 数据目录下如果有文件,会导致初始化失败 初始化完成后,会在数据目录下生成一系列文件
# cd /data/mysql/mysql3306/data/
# ls
auto.cnf error.log ib_buffer_pool ibdata1 ib_logfile0 ib_logfile1 ib_logfile2 mysql performance_schema slow.log sys
说明:
error.log中保存了安装、启动、运行mysql过程中所出现的错误信息出,初始root密码也在其中 获取root的初始密码
# cat /data/mysql/mysql3306/data/error.log | grep password 补充:
用--initialize-inseucre来做初始化的时候,root的初始密码为空

第五步:启动mysql

    # /usr/local/mysql/support-files/mysql.server start

第六步:导出二进制

   # vim /etc/profile.d/mysql.sh
export PATH=$PATH:/usr/local/mysql/bin
# source /etc/profile

第七步:登录mysql

  # mysql -uroot -pxxx  <<xxx表示密码,这里输入你的密码

第八步:重置mysql的root密码

  mysql> ALTER USER user() IDENTIFIED BY "";

    mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+

第九步:生成服务管理脚本

   centos5、
# cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
# chkcongig mysqld on
# service msyqld start|stop.... centos7
# vim mysql3306.service
[Unit]
Description=mysql service [Service]
Type=forking
ExecStart=/bin/bash /usr/local/mysql/support-files/mysql.server start
ExecStop=/bin/bash /usr/local/mysql/support-files/mysql.server stop
ExecRestart=/bin/bash /usr/local/mysql/support-files/mysql.server restart [Install]
WantedBy=multi-user.target # mv mysql3306.service /usr/lib/systemd/system/
# systemctl enable mysql3306.service
# systemctl start mysql3306.service
# ss -tnl | grep
# systemctl stop mysql3306.service
# ss -tnl | grep

多实例(初始化实现)

多实例可以提升服务器的资源使用率,降低单个mysql服务的并发请求量。

第二个mysql实例,配置如下

    端口:
安装位置: /usr/local/mysql
数据位置: /data/mysql/mysql3307/data
临时文件位置: /data/mysql/mysql3307/tmp
日志文件位置: /data/mysql/mysql3307/logs/mysql-bin
socket文件位置:/tmp/mysql3307.sock
配置文件: /data/mysql/mysql3307/my.cnf

第一步:创建相关目录

    # mkdir /data/mysql/mysql3307/{tmp,data,logs} -pv
# chown -R mysql.mysql /data

第二步:生成配置文件

    # cp /etc/my.cnf /data/mysql/mysql3307/
# sed -i 's/3306/3307/g' /data/mysql/mysql3307/my.cnf
# cat /data/mysql/mysql3307/my.cnf

第三步:初始化

    # /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3307/my.cnf --initialize

第四步:启动mysql

    # /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3307/my.cnf &

第五步:登录多实例

    # mysql -uroot -pc-7ae#sgan1K -S /tmp/mysql3307.sock

多实例(复制模版实现)

第三个mysql实例,配置如下

    端口:
安装位置: /usr/local/mysql
数据位置: /data/mysql/mysql3308/data
临时文件位置: /data/mysql/mysql3308/tmp
日志文件位置: /data/mysql/mysql3308/logs/mysql-bin
socket文件位置:/tmp/mysql3308.sock
配置文件: /data/mysql/mysql3308/my.cnf

第一步:创建相关目录

    # mkdir /data/mysql/mysql3308/{tmp,data,logs} -pv
# chown -R mysql.mysql /data

第二步:生成配置文件

    # cp /etc/my.cnf /data/mysql/mysql3308/
# sed -i 's/3306/3308/g' /data/mysql/mysql3308/my.cnf
# cat /data/mysql/mysql3308/my.cnf

第三步:复制模版生成系统数据库文件

    # cd /data/mysql/
# cp mysql3306/data/* mysql3308/data/ -a

第四步:启动实例

    # /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3308/my.cnf &
# ss -tnl

第五步:登录实例  

    # mysql -uroot -pc-7ae#sgan1K -S /tmp/mysql3308.sock

使用mycli

Mycli是一个MySQL命令行客户端工具,具有自动完成和语法突出显示功能。
它是由印度人基于python开发的一个工具,适合初学者或者对数据库熟悉但命令记不住的人群,能很好地克服记不住命令的困难。

第一步:安装

[root@ken ~]# yum install python-pip python-devel -y

[root@ken ~]# pip install mycli

第二步:登录

和使用mysql是一样的

[root@ken ~]# mycli -uroot 

第三步:使用

启动/关闭mysql

   启动mysql
/usr/local/mysql/support-files/mysql.server <<使用这个启动mysql会调动bin/mysqld_safe
/usr/local/mysql/bin/mysqld_safe <<这个启动,如果mysql关闭会再启动 看门狗
/usr/local/mysql/bin/mysqld <<要通过这个来实现启动
关闭mysql
mysqladmin -uUserName -pPassword -hIP -Pport -S /path/to/socket shutdown

MySQL系列详解一:MySQL&&多实例安装-技术流ken的更多相关文章

  1. MySQL系列详解八:MySQL多线程复制演示-技术流ken

    前言 Mysql 采用多线程进行复制是从 Mysql 5.6 开始支持的内容,但是 5.6 版本下有缺陷,虽然支持多线程,但是每个数据库只能一个线程,也就是说如果我们只有一个数据库,则主从复制时也只有 ...

  2. MySQL系列详解六:MySQL主从复制/半同步演示-技术流ken

    前言 随着技术的发展,在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的需求.此时数据库集群就很好的解决了这个问题了.采用MySQL分布式集群,能够搭建一个高并发.负载均衡的集群服务器.在 ...

  3. MySQL系列详解三:MySQL中各类日志详解-技术流ken

    前言 日志文件记录了MySQL数据库的各种类型的活动,MySQL数据库中常见的日志文件有 查询日志,慢查询日志,错误日志,二进制日志,中继日志 .下面分别对他们进行介绍. 查询日志 1.查看查询日志变 ...

  4. MySQL系列详解九:MySQL级联复制演示-技术流ken

    前言 级联复制就是master服务器,只给后端一台slave服务器同步数据,然后这个slave服务器在向后端的所有slave服务器同步数据,这样就可以降低master服务器的写压力,和复制数据的网络I ...

  5. MySQL系列详解五: xtrabackup实现完全备份及增量备份详解-技术流ken

    xtrabackup简介 xtrabackup是一个用来对mysql做备份的工具,它可以对innodb引擎的数据库做热备.xtrabackup备份和还原速度快,备份操作不会中断正在执行的事务,备份完成 ...

  6. MySQL系列详解二:MySQL语句操作-技术流ken

    简介 本篇博客将详细讲解mysql的一些常用sql语句操作,例如创建数据库,删除数据库,创建表,修改表,删除表,以及简单查询案例. 关于mysql数据中的SQL的大小写问题 1.不区分大小写 1. s ...

  7. MySQL系列详解十:MySQL多源复制演示-技术流ken

    前言 多源复制即多主一从结构,多个主服务器端的数据都会同步到后端一个从服务器上面.至于为什么要做多源复制下面的总结很到位. 1.灾备作用:将各个库汇总在一起,就算是其他库都挂了(整个机房都无法连接了) ...

  8. MySQL系列详解七:MySQL双主架构演示-技术流ken

    前言 在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要作改动.因此,如果是双主或者多主,就会增加mys ...

  9. MySQL系列详解四:MySQL事务-技术流ken

    MySQL 事务 MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数 ...

随机推荐

  1. MyBatis配置C3P0连接池

    一.导包 c3p0包     mybatis包 数据库的连接包 二.继承UnpooledDataSourceFactory的类 Mybatis 没有帮开发者实现 c3p0 数据库连接池,故需要使用者自 ...

  2. flask-文件上传

    flask文件上传 流程 1. 上传的文件request.files拿取 2. 可以通过WTForms表单验证 3. 通过secure_filename (from werkzeug.utils im ...

  3. 记录一次Service被注入mapper实例的错误

    在一个搭建框架为SSM的项目中,有一个需求是数据库更新同步Solr索引库的数据. 在使用ActiveMQ作为中间件,实现这个需求时却发生了一个错误. 在Listener实现类里我想注入一个Servic ...

  4. ModelAndView返回json对象的方法

    这是在spring4之后. @RequestMapping(value = "/returnjson") public ModelAndView getfsd(){ ModelAn ...

  5. PYTHON进阶(3)

    学习内容: 1.Python模块redis 2.Python模块memcach 3.Python模块SQLAlchemy 一.Python模块redis redis介绍 二.Python模块memca ...

  6. Python中用random产生随机数的用法

    >>>random.randomrandom.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0 >>>random.unifo ...

  7. Python学习笔记-基础2

    1.列表list 列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现. 1.定义列表 names = ["Ronaldo","Messi" ...

  8. 调用接口,发送https请求

    调用https接口有两种方式 一:是导入证书; 证书调用https请求本人还不知道,希望看见此博客的大神给我回复. 二:是创建信任管理器. 第一步:实现X509TrustManager接口,里面的方法 ...

  9. 卷积神经网络中的channel 和filter

    在深度学习的算法学习中,都会提到 channels 这个概念.在一般的深度学习框架的 conv2d 中,如 tensorflow .mxnet,channels 都是必填的一个参数. channels ...

  10. Asp.Net WebApi核心对象解析(二)

    在接着写Asp.Net WebApi核心对象解析(下篇)之前,还是一如既往的扯扯淡,元旦刚过,整个人还是处于晕的状态,一大早就来处理系统BUG,简直是坑爹(好在没让我元旦赶过来该BUG),队友挖的坑, ...