MySQL数据库基础(3)多实例应用实战

一、什么是MySQL多实例?

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

    共用一套MySQL安装程序

    使用不同(也可以相同)的my.cnf配置文件、启动程序、数据文件

    作个比喻,MySQL多实例相当于房子的多个卧室一样,每个势力可以看做一个卧室,整个服务器就是一套房子。逻辑上是独立的,但是互相会有影响。

二、多实例的作用与问题

    1、有效利用服务器资源

        当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务。

    2、节约服务器资源

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

    3、资源互相抢占问题

        当某个服务实例并发很高或者有慢查询时,整个实例会消耗整个更多的内存、CPU、磁盘IO资源,导致服务器上的其他的实例提供服务的质量下降。这就相当于大家住在一个房子的不同卧室一样,早晨起来上班,都要刷牙、洗脸等,这样卫生间就会被长期占用,其它人就要等待一样的道理。

三、MySQL多实例生产应用场景

    1、资金紧张型公司的选择

    2、并发访问不是特别大的业务

    3、门户网站应用MySQL多实例场景

    主要是俩点:节约资金,充分利用资源

四、MySQL多实例常见配置方案

    1、多配置文件部署方案:配置多个配置文件及多个启动程序

    

    提示:配置文件,启动程序,数据文件分别是独立的

    2、单一配置文件部署方案

    mysqld_multi  (官方推荐) 耦合性太高

五、安装多实例MySQL数据库

    1、MySQL安装详细请看https://www.cnblogs.com/cnxy168/p/11540198.html

    2、创建MySQL多实例的数据文件目录

        rm -f /etc/init.d/mysqld

        [[email protected] ~]# mkdir -p /data/{3306,3307}/data
        [[email protected] ~]# tree /data
        /data        #总的多实例根目录
        ├── 3306      #3306实例的目录
        │   └── data    #3306手里的数据文件目录
        └── 3307      #3307实例的目录
          └── data    #3307实例的数据文件目录

        4 directories, 0 files

        生产硬件配置:MEM 32g 双cpu 8核  磁盘6*600g sas  15k。能跑2-3个实例

    3、创建MySQL多实例的数据配置文件

rm -f /etc/init.d/mysqld
mkdir -p /data/{3306,3307}/data

[[email protected] ~]# tree /data
/data
├── 3306
│   └── data
└── 3307
    └── data

4 directories, 0 files

[[email protected] ~]# cd /home/oldboy/tools/
[email protected] tools]# unzip data.zip
[[email protected] tools]# cp data/3306/my.cnf /data/3306
[[email protected] tools]# cp data/3307/my.cnf /data/3307
[[email protected] tools]# tree /data
/data
├── 3306
│   ├── data
│   └── my.cnf
└── 3307
    ├── data
    └── my.cnf

4 directories, 2 files

[[email protected] tools]# cp data/3306/mysql /data/3306
[[email protected] tools]# cp data/3307/mysql /data/3307

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

4 directories, 4 files     

cp data.zip  /
unzip -o data.zip    #可代替上面操作

    4、配置MySQL多实例的文件权限

         授权mysql用户和组管理整个多实例目录/data

[[email protected] tools]# chown -R mysql.mysql /data
[[email protected] tools]# find /data/ -type f -name "mysql"
/data/3306/mysql
/data/3307/mysql
[[email protected] tools]# find /data/ -type f -name "mysql"|xargs ls -l
-rw-r--r--. 1 mysql mysql 1307 9月  18 14:12 /data/3306/mysql
-rw-r--r--. 1 mysql mysql 1307 9月  18 14:12 /data/3307/mysql
[[email protected] tools]# find /data/ -type f -name "mysql"|xargs chmod +x
[[email protected] tools]# find /data/ -type f -name "mysql"|xargs ls -l
-rwxr-xr-x. 1 mysql mysql 1307 9月  18 14:12 /data/3306/mysql
-rwxr-xr-x. 1 mysql mysql 1307 9月  18 14:12 /data/3307/mysql

    5、配置MySQL命令全局使用路径

        1)配置全局路径意义

            如果不配置MySQL命令的全局路径,就无法直接敲mysql等命令,也就是只能/usr/local/mysql/bin/mysql这样敲命令

        2)[[email protected] tools]# tail -1 /etc/profile

          export PATH=/application/mysql/bin:$PATH

        

    6、初始化MySQL多实例的数据库文件

        1)初始化命令为

          mysql5.5.32初始化命令:

[[email protected] tools]# cd /application/mysql/scripts/
[[email protected] scripts]# ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3306/data --user=mysql
[[email protected] scripts]# ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3307/data --user=mysql

        2)为什么要初始化数据库?

          a.初始化的主要目的就是创建基础的数据库文件,例如:生成mysql库表等。

          b.初始化后查看对应实例数据目录,可以看到如下文件。

[[email protected] scripts]# tree /data
/data
├── 3306
│   ├── data
│   │   ├── mysql
│   │   │   ├── columns_priv.frm
│   │   │   ├── columns_priv.MYD
│   │   │   ├── columns_priv.MYI
│   │   │   ├── db.frm
│   │   │   ├── db.MYD
│   │   │   ├── db.MYI
│   │   │   ├── event.frm
│   │   │   ├── event.MYD
│   │   │   ├── event.MYI
│   │   │   ├── func.frm
│   │   │   ├── func.MYD
省略。。。

    7、启动MySQL多实例数据库

[[email protected] scripts]# /data/3306/mysql start
Starting MySQL...
[[email protected] scripts]# /data/3307/mysql start
Starting MySQL...
[[email protected] scripts]# netstat -lntup|grep 330[6-7]
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      22823/mysqld
tcp        0      0 0.0.0.0:3307                0.0.0.0:*                   LISTEN      24832/mysqld 

    8、MySQL故障排错多实例数据库

[[email protected] 3306]# grep log-error my.cnf|tail -1
log-error=/data/3306/mysql_oldboy3306.err
[[email protected] 3306]# cat mysql_oldboy3306.err
190918 14:45:32 mysqld_safe Starting mysqld daemon with databases from /data/3306/data
190918 14:45:32 [Note] Plugin ‘FEDERATED‘ is disabled.
190918 14:45:32 InnoDB: The InnoDB memory heap is disabled
190918 14:45:32 InnoDB: Mutexes and rw_locks use GCC atomic builtins
190918 14:45:32 InnoDB: Compressed tables use zlib 1.2.3
190918 14:45:32 InnoDB: Initializing buffer pool, size = 32.0M
190918 14:45:32 InnoDB: Completed initialization of buffer pool

    9、MySQL多实例数据库管理方法

  ## 在MySQL里面   命令前面加 system  可以切换 数据库

 六、MySQL安全配置

[[email protected] 3306]# mysqladmin -u root -S /data/3306/mysql.sock password ‘oldboy123‘
[[email protected] 3306]# mysqladmin -u root -S /data/3307/mysql.sock password ‘oldboy123‘
[[email protected] 3306]# vim mysql
[[email protected] 3306]# cd ..
[[email protected] data]# vim 3307/my
my.cnf                mysqld.pid            mysql.sock
mysql                 mysql_oldboy3307.err
[[email protected] data]# vim 3307/my
my.cnf                mysqld.pid            mysql.sock
mysql                 mysql_oldboy3307.err
[[email protected] data]# vim 3307/mysql.sock
[[email protected] data]# ls
3306  3307
[[email protected] data]# cd 3307
[[email protected] 3307]# vim mysql
[[email protected] 3307]# find /data -type f -name "mysql" | -exec chmod 700 {} \;
-bash: -exec: command not found
[[email protected] 3307]# find /data -type f -name "mysql"  -exec chmod 700 {} \;
[[email protected] 3307]# find /data -type f -name "mysql"  -exec chown root.root {} \;
[[email protected] 3307]# find /data -type f -name "mysql"  -exec ls -l {} \;
-rwx------. 1 root root 1310 9月  18 17:48 /data/3306/mysql
-rwx------. 1 root root 1310 9月  18 17:48 /data/3307/mysql
[[email protected] 3307]# ss -lntup|grep 330
tcp    LISTEN     0      128                    *:3306                  *:*      users:(("mysqld",26485,12))
tcp    LISTEN     0      128                    *:3307                  *:*      users:(("mysqld",27202,11))
[[email protected] 3307]# pkill mysqld
[[email protected] 3307]# ss -lntup|grep 330
[[email protected] 3307]# /data/3306/mysql start
Starting MySQL...
[[email protected] 3307]# /data/3307/mysql start
Starting MySQL...
[[email protected] 3307]# ss -lntup|grep 330
tcp    LISTEN     0      128                    *:3306                  *:*      users:(("mysqld",28117,12))
tcp    LISTEN     0      128                    *:3307                  *:*      users:(("mysqld",28834,11))

#在mysql脚本里面 修改数据库密码   把脚本修改为root权限

数据库有密码登录数据库

mysql -u用户  -p密码 -S /data/3306/mysql.sock

七、如何再添加一个MySQL实例

:g/A/s//B/g              #把符合A的内容全部替换为B
:%s/A/B/g               #把符合A的内容全部替换为B
:n1,n2s/A/B/gc        #n1,n2为数字,在第n1和n2间寻找A,用B替换

    增加一个MySQL实例的命令过程如下:

[[email protected] ~]# mkdir /data/3308/data -p
[[email protected] ~]# cp /data/3306/my.cnf /data/3308
[[email protected] ~]# cp /data/3306/mysql /data/3308
[[email protected] ~]# chown -R mysql.mysql /data/3308
[[email protected] ~]# vim /data/3308/mysql
[[email protected] ~]# vim /data/3308/my.cnf     这两项用上面的替换命令把3306替换成3308
[[email protected] scripts]#  ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3308/data --user=mysql
Installing MySQL system tables...
OK
Filling help tables...
OK
[[email protected] scripts]# /data/3308/mysql start
Starting MySQL...
[[email protected] scripts]# ss -lntup | grep 330
tcp    LISTEN     0      128                    *:3308                  *:*      users:(("mysqld",410,12))
[[email protected] scripts]# mysql -uroot  -S /data/3308/mysql.sock
[[email protected] scripts]# mysqladmin -u root -S /data/3308/mysql.sock password ‘oldboy123‘
[[email protected] scripts]# mysql -uroot -poldboy123 -S /data/3308/mysql.sock

八 、小结

    远程连接:mysql -u用户  -p密码  -h 地址  -P 端口

    

原文地址:https://www.cnblogs.com/cnxy168/p/11543088.html

时间: 2024-10-06 02:15:22

MySQL数据库基础(3)多实例应用实战的相关文章

MySQL数据库基础(四)——MySQL数据库创建实例

MySQL数据库基础(四)--MySQL数据库创建实例 一.创建数据库 1.创建数据库 创建数据库,指定数据库的默认字符集为utf8.create database schoolDB default character set utf8;连接数据库,客户端必须选择UTF8字符集.数据库中的三张表分别为学生表(student).课程表(TSubject).分数表(TScore). 2.创建学生表 CREATE TABLE `TStudent` ( `StudentID` varchar(15) N

MySQL数据库基础(三)——SQL语言

MySQL数据库基础(三)--SQL语言 一.SQL语言简介 1.SQL语言简介 SQL是结构化查询语言(Structured Query Language),是用于访问和处理数据库的标准的计算机语言.SQL语言的功能如下:A.SQL面向数据库执行查询B.SQL可从数据库取回数据C.SQL可在数据库中插入新的记录D.SQL可更新数据库中的数据E.SQL可从数据库删除记录F.SQL可创建新数据库G.SQL可在数据库中创建新表H.SQL可在数据库中创建存储过程I.SQL可在数据库中创建视图J.SQL

MySQL数据库基础(六)——SQL插入、更新、删除操作

MySQL数据库基础(六)--SQL插入.更新.删除操作 一.插入数据 1.为表的所有字段插入数据 使用基本的INSERT语句插入数据要求指定表名称和插入到新记录中的值. INSERT INTO table_name (column_list) VALUES (value_list); insert into `TSubject` (subjectID,subjectName,BookName,Publisher) values ('0004','英语','大学英语走遍美国','清华出版社')

MySQL数据库基础知识

day02 MySQL数据库基础知识 一.基础知识概述: 基础决定你这门课程的学习成败!只有学习好这些基础知识以后,你才能真正的运用自如.才能够对数据库有更深入的了解,道路才会越走越远. 二.基础知识: 1.数据库(database):数据库就好比是一个物理的文档柜,一个容器,把我们整理好的数据表等等归纳起来. 创建数据库命令:        create database 数据库名; 2.查看数据库         show databases; 3.打开指定的数据库         use 

MYSQL数据库基础

MySQL数据库基础 本文的所有操作是基于CMD命令行操作方式,且可适当参考<打通MySQL的操作权限>中的内容,该文算是针对前期的环境配置问题提供了一个较为全面的解决方案,与本文是一个相(yao)辅(xiang)相(hu)成(ying)的关系. 一.连接相关 1. 启动MySQL服务器:net start mysql 2. 连接MySQL数据库:mysql -uroot -h127.0.0.1 -ppassword 3. 断开MySQL数据库:连接到MySQL服务器后,可通过在MySQL提示

mysql数据库分区功能及实例详解

分区听起来怎么感觉是硬盘呀,对没错除了硬盘可以分区数据库现在也支持分区了,分区可以解决大数据量的处理问题,下面一起来看一个mysql数据库分区功能及实例详解 一,什么是数据库分区 前段时间写过一篇关于mysql分表的的文章,下面来说一下什么是数据库分区,以mysql为例.mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可以通过my.cnf中的datadir来查看),一张表主要对应着三个文件,一个是frm存放表结构的,一个是myd存放表数据的,一个是myi存

PHP移动互联网开发笔记(6)——MySQL数据库基础回顾

最近看了一些架构方面的资料,但是发现基础知识都不怎么牢固,接下来的一段时间,我会定期总结基础知识. 一.数据类型 1.整型 数据类型 存储空间 说明 取值范围 TINYINT 1字节 非常小的整数 带符号值:-128~127 无符号值:0~255 SMALLINT 2字节 较小的整数 带符号值:-32768~32767 无符号值:0~65535 MEDIUMNT 3字节 中等大小的整数 带符号值:-8388608~8388607 无符号值:0~16777215 INT 4字节 标准整数 带符号值

mysql数据库基础的简单操作指南

最近在学习mysql,本文是做的关于mysql学习的笔记,跟大家分享一下,希望对大家学习mysql知识有所助益.mysql现在几乎已经成了网站建设的主流数据库,很多php网站系统都采用了mysql数据库.比mssql最大的优势在于开源,免费.希望与大家共同进步. mysql数据库基础的简单操作指南:首先进入mysql:mysql -u root -p 1.建库: create database 库名称; 例如:create database mydata;(创建一个名为“mydata”的库):

mysql数据库基础(一)

Mysql列子查询及IN,ALL,SOME,ANY的使用 table1: s1 2 10 table2: s2 5 12 20 列子查询中使用IN,ANY,SOME和ALL操作符. IN:在指定项内,同IN(项1,项2,..) ANY:与比较操作符联合使用,接在比较操作符后面表示与子查询返回的任何值比较为TRUE,则返回TRUE. SOME:ANY的别名,较少使用. ALL:与比较操作符联合使用,表示与子查询返回的所有值比较都为TRUE,则返回TRUE. 细节:IN 是 = ANY 的别名,二者

MYSQL数据库基础学习笔记

一.mysql的安装与初始化: 安装mysql命令: yum install -y mysql-server mysql mysql-devel 初始化: service mysqld start   //第一次启动mysqld服务会自动初始化: 创建用户并初始化密码: mysqladmin -u root passwd '密码' 登陆mysql: mysql -u root -p 退出mysql: quit.exit 设置mysqld服务自启动: chkconfig mysqld on mys