zoukankan      html  css  js  c++  java
  • MySQL系列详解一:MySQL&&多实例安装-技术流ken

    简介

    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的方式存储

    一.特点

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

    更易于扩展

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

    类型1key-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.15.1稳定版

    第二条:5.4-5.75.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            = 3306
     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 = 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 

     

    多实例(初始化实现)

    多实例可以提升服务器的资源使用率,降低单个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

     

    多实例(复制模版实现)

    第三个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

     

    使用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
  • 相关阅读:
    [Android Studio 权威教程]Windows下安装Android Studio
    iOS:获取图片Alpha图片
    MFC 直线 虚线 折线 圆 椭圆 矩形 弧形
    大北农董事长夫人莫云为何在美国被逮捕?
    【源代码】LinkedHashMap源代码剖析
    前端那些事儿——中文乱码,网页中文乱码,网页乱码,块元素,内联元素
    Struts2通过自己定义拦截器实现登录之后跳转到原页面
    unity3d ngui-TweenRotation-TweenPosition-TweenScale
    分析函数在数据分析中的应用
    Java Collection
  • 原文地址:https://www.cnblogs.com/kenken2018/p/9774406.html
Copyright © 2011-2022 走看看