mysql系列详解一:mysql&&多实例安装-技术流ken

1.简介

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

2.关系型数据库

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

一.概念

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

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

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

域:字段的取值范围

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

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

二.关系型数据库的优点

1. 容易理解

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

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

三.关系型数据库的缺点

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

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

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

3. 可扩展性

拆分,分库,分表

4. 读写的时效性

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

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

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

3.非关系型数据库(NoSQL)

NoSQL Not Only SQL

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

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

一.特点

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

更易于扩展

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

类型1:key-value

借助于hash表实现快速读写

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

产品:

redis:内存+磁盘

memcached:纯内存的数据库

类型2:列式存储数据库

Column Family(列簇)

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

产品:

HBbase

Cassandra

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

数据库中所存放的是文档

产品:

MongoDB

类型4:图形数据库

graph

4.选择mysql理由

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

2. 性能好,而且稳定

3. 开源

4. 社区活跃

5. 轻量级

6. 维护简单

7. 支持跨平台

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

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

5.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

6.生产环境中如何选择版本

1. 选择社区版

2. 选择稳定版

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

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

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

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

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

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

7.安装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            = 3306
 socket          = /tmp/mysql3306.sock

 [mysql]
 prompt="\\[email protected]\\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 = 3306
 socket = /tmp/mysql3306.sock
 event_scheduler = 0

 tmpdir = /data/mysql/mysql3306/tmp
 #timeout
 interactive_timeout = 300
 wait_timeout = 300

 #character set
 character-set-server = utf8

 open_files_limit = 65535
 max_connections = 100
 max_connect_errors = 100000
 lower_case_table_names =1

 #symi replication

 #rpl_semi_sync_master_enabled=1
 #rpl_semi_sync_master_timeout=1000 # 1 second
 #rpl_semi_sync_slave_enabled=1

 #logs
 log-output=file
 slow_query_log = 1
 slow_query_log_file = slow.log
 log-error = error.log
 log_warnings = 2
 pid-file = mysql.pid
 long_query_time = 1
 #log-slow-admin-statements = 1
 #log-queries-not-using-indexes = 1
 log-slow-slave-statements = 1

 #binlog
 #binlog_format = STATEMENT
 binlog_format = row
 server-id = 1003306
 log-bin = /data/mysql/mysql3306/logs/mysql-bin
 binlog_cache_size = 4M
 max_binlog_size = 256M
 max_binlog_cache_size = 1M
 sync_binlog = 0
 expire_logs_days = 10
 #procedure
 log_bin_trust_function_creators=1

 #
 gtid-mode = on
 enforce-gtid-consistency=1

 #relay log
 skip_slave_start = 1
 max_relay_log_size = 128M
 relay_log_purge = 1
 relay_log_recovery = 1
 relay-log=relay-bin
 relay-log-index=relay-bin.index
 log_slave_updates
 #slave-skip-errors=1032,1053,1062
 #skip-grant-tables

 #buffers & cache
 table_open_cache = 2048
 table_definition_cache = 2048
 table_open_cache = 2048

 max_heap_table_size = 96M
 sort_buffer_size = 128K
 join_buffer_size = 128K
 thread_cache_size = 200
 query_cache_size = 0
 query_cache_type = 0
 query_cache_limit = 256K
 query_cache_min_res_unit = 512
 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 = 1

 #innodb
 innodb_buffer_pool_size = 100M
 innodb_buffer_pool_instances = 1
 innodb_data_file_path = ibdata1:100M:autoextend
 innodb_flush_log_at_trx_commit = 2
 innodb_log_buffer_size = 8M
 innodb_log_file_size = 100M
 innodb_log_files_in_group = 3
 innodb_max_dirty_pages_pct = 50
 innodb_file_per_table = 1
 innodb_rollback_on_timeout
 innodb_status_file = 1
 innodb_io_capacity = 100
 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.23-linux-glibc2.12-x86_64.tar.gz
    # mv mysql-5.7.23-linux-glibc2.12-x86_64 /usr/local/
    # cd /usr/local
    # ln -sv mysql-5.7.23-linux-glibc2.12-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
    说明:
        1. --user是用于指定以哪个用户的身份完成初始化工作(默认从配置文件中读取)
        2. 数据目录下如果有文件,会导致初始化失败

    初始化完成后,会在数据目录下生成一系列文件
    # 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 "123";

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

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

   centos5、6
        # 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 3306 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 3306
        # systemctl stop mysql3306.service
        # ss -tnl | grep 3306 

8.多实例(初始化实现)

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

第二个mysql实例,配置如下

    端口:3307
    安装位置:      /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

9.多实例(复制模版实现)

第三个mysql实例,配置如下

    端口:3308
    安装位置:      /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

10.启动/关闭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

原文地址:https://www.cnblogs.com/kenken2018/p/9774406.html

时间: 2024-11-08 21:54:28

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

mysql系列详解二:sql语句操作-技术流ken

1.简介 本篇博客将详细讲解mysql的一些常用sql语句操作,例如创建数据库,删除数据库,创建表,修改表,删除表,以及简单查询案例. 2.关于mysql数据中的SQL的大小写问题 1.不区分大小写 1. sql中的关键字函数名 2. 存储过程.促存储函数.调度器 2.区分大小写 1. 库名.表名(也可以不区分--修改配置文件或者环境变量) 2. 触发器 3. 视图 3.第一类语句:与数据库相关的语句 语句1:创建数据库 CREATE DATABASE [IF NOT EXISTS] db_na

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

前言 在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要作改动.因此,如果是双主或者多主,就会增加mysql入口,增加高可用.不过多主需要考虑自增长ID问题,这个需要特别设置配置文件,比如双主,可以使用奇偶,总之,主之间设置自增长ID相互不冲突就能完美解决自增长ID冲突问题. MySQL双主(主主)架构方案思路是 1.两台mysql都可读写,互为主备,默认只使用一台(masterA)负责数据的写入,另

mysql系列详解四:mysql事务-技术流ken

MySQL 事务 MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务! 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务. 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行. 事务用来管理 insert,update,delete 语句 一般来说,事务是必须满足4个条件(A

MySQL配置文件mysql.ini参数详解、MySQL性能优化

MySQL配置文件mysql.ini参数详解.MySQL性能优化 my.ini(Linux系统下是my.cnf),当mysql服务器启动时它会读取这个文件,设置相关的运行环境参数. my.ini分为两块:Client Section和Server Section.   Client Section用来配置MySQL客户端参数.   要查看配置参数可以用下面的命令: show variables like '%innodb%'; # 查看innodb相关配置参数 show status like

Mysql 配置文件详解

本文参考: 马哥视频教程 mysql官方手册 MySQL my.cnf参数配置优化详解 MySQL Innodb 存储引擎参数优化 整理 =======================================[ client ]====================================== password = [] port 服务端口, default: 3306 socket 服务套接字, 程序使用套接字链接比使用域名:端口链接要快, 因为这样就不需要协议解析了 ===

MYSQL explain详解 转自http://blog.csdn.net/zhuxineli/article/details/14455029

标签: WHERE子句用于限制哪一个行匹配下一个如果Extra值不为Using wher查询可能会有一些错误 如果想 2013-11-24 17:55 36299人阅读 评论(5) 收藏 举报  分类: mysql(13)  版权声明:本文为博主原创文章,未经博主允许不得转载. explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 先解析一条sql语句,看出现什么内容 EXPLAINSELECTs.uid,s.username

JAVAWEB开发之事务详解(mysql与JDBC下使用方法、事务的特性、锁机制)和连接池的详细使用(dbcp以d3p0)

事务简介 事务的概念:事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功 在开发中,有事务的存在,可以保证数据的完整性. 注意:数据库默认事务是自动提交的,也就是发一条SQL 就执行一条.如果想多条SQL语句放在一个事务中执行,需要添加事务有关的语句. 如何开启事务? 事务的操作方式: 创建表: create table account( id int primary key auto_increment, name varchar(20), money double

MySQL权限详解

MySQL权限详解 MySQL权限级别介绍 MySQL权限级别 全局性的管理权限,作用于整个MySQL实例级别 数据库级别的权限,作用于某个指定的数据库上或者所有的数据库上 数据库对象级别的权限,作用于指定的数据库对象上(表.视图等)或 者所有的数据库对象上 权限存储在mysql库的user, db, tables_priv, columns_priv, and procs_priv这几个系统表中,待MySQL实例启动后就加载到内存中 MySQL权限级别介绍 对比root用户在几个权限系统表中的

MySQL存储过程详解 mysql 存储过程

MySQL存储过程详解  mysql 存储过程 (2010-12-13 10:59:38) 转载▼ 标签: it 分类: mysql mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保