MySQL 第二篇

一、MySQL多实例介绍

mysql多实例,共用一套mysql安装程序,使用不同的配置文件(my.cnf)、启动程序、和数据文件,即在一台服务器上同时开启多个不同的服务器端口(3306,3307),同时运行多个mysql服务进程,这些服务进程通过不同的socket监听不同的服务器端口来提供服务。

二、安装mysql多实例

1.下载mysql/cmake安装包


1

2

3

[[email protected] ~]# mkdir /home/tools

[[email protected] ~]# wget –P /home/tools https://cmake.org/files/v2.8/cmake-2.8.12.tar.gz

[[email protected] tools]# wget -P /home/tools/ http://cdn.mysql.com//Downloads/MySQL-5.5/mysql-5.5.50.tar.gz

2.建立账号


1

2

3

4

5

6

[[email protected] ~]# groupadd mysql

[[email protected] ~]# useradd -s /sbin/nologin -g mysql -M mysql

useradd参数说明:

   -s /sbin/nologin        # 表示禁止该用户登录,只需角色存在即可,加强安全

   -g mysql                # 指定属组

   -M                      # 表示不创建用户家目录

3.配置安装环境

创建目录并授权


1

2

3

4

[[email protected] ~]# mkdir -p /usr/local/mysql

[[email protected] ~]# mkdir -p /db/{3306,3307}/data       # 多实例文件目录结构

[[email protected] ~]# chown -R mysql.mysql /usr/local/mysql

[[email protected] ~]#  chown -R mysql.mysql /db

安装依赖


1

[[email protected] ~]# yum install gcc gcc-c++ make cmake ncurses-devel bison perl -y

配置解析


1

2

3

4

[[email protected] ~]# uname -n

slave

[[email protected] ~]# vim /etc/hosts

192.168.10.65   slave

4.安装mysql(在这一步和之前,安装配置都和单实例配置相同)


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

[[email protected] tools]# tar -zxf mysql-5.5.50.tar.gz

[[email protected] tools]# cd mysql-5.5.50

[[email protected] mysql-5.5.50]# cmake \

> -DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ \

> -DMYSQL_DATADIR=/db/3306/data \    # 这里数据目录先指定一个,后面初始化时手工配置

> -DMYSQL_TCP_PORT=3306 \

> -DDEFAULT_CHARSET=utf8 \

> -DDEFAULT_COLLATION=utf8_general_ci \

> -DEXTRA_CHARSETS=all \

> -DENABLED_LOCAL_INFILE=ON \

> -DWITH_INNOBASE_STORAGE_ENGINE=1 \

> -DWITH_FEDERATED_STORAGE_ENGINE=1 \

> -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \

> -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \

> -DWITHOUT_PARTITION_STORAGE_ENGINE=1 \

> -DWITH_FAST_MUTEXES=1 \

> -DWITH_ZLIB=bundled \

> -DENABLED_LOCAL_INFILE=1 \

> -DWITH_READLINE=1 \

> -DWITH_EMBEDDED_SERVER=1 \

> -DWITH_DEBUG=0 \

> -DMYSQL_UNIX_ADDR=/tmp/mysql.sock


1

2

[[email protected] mysql-5.5.50]# make

[[email protected] mysql-5.5.50]# make install

5.创建mysql多实例配置文件


1

2

[[email protected] ~]# vim /db/3306/my.cnf

[[email protected] ~]# vim /db/3307/my.cnf


MySQL  3306实例


MySQL  3307实例


[client]

port        = 3306

socket      = /db/3306/mysql.sock

[mysql]

no-auto-rehash

[mysqld]

user        = mysql

port        = 3306

socket      = /db/3306/mysql.sock

basedir     = /usr/local/mysql/

datadir     = /db/3306/data

open_files_limit    = 1024

back_log  = 600

max_connections  = 800

max_connect_errors  = 3000

table_cache  = 1024

external-locking    = FALSE

max_allowed_packet  = 16M

sort_buffer_size  = 8M

join_buffer_size  = 8M

thread_cache_size  = 100

thread_concurrency  = 8

query_cache_size  = 2M

query_cache_limit  = 1M

query_cache_min_res_unit  = 2k

#default_table_type  = InnoDB

thread_stack  = 192K

#transaction_isolation  = READ-COMMITTED

tmp_table_size  = 2M

max_heap_table_size  = 2M

long_query_time  = 1

pid-file=/db/3306/mysql.pid

relay-log  = /db/3306/relay-bin

relay-log-info-file  = /db/3306/relay-log.info

binlog_cache_size  = 1M

max_binlog_cache_size  = 1M

max_binlog_size  = 1M

key_buffer_size  = 16M

read_buffer_size  = 1M

read_rnd_buffer_size  = 1M

bulk_insert_buffer_size  = 1M

lower_case_table_names  = 1

skip-name-resolve

slave-skip-errors  = 1032,1062

replicate-ignore-db  = mysql

server-id  = 1

innodb_additional_mem_pool_size  = 4M

innodb_buffer_pool_size  = 32M

innodb_data_file_path  = ibdata1:28M:autoextend

innodb_file_io_threads  = 4

innodb_thread_concurrency  = 16

innodb_flush_log_at_trx_commit  = 2

innodb_log_buffer_size  = 8M

innodb_log_file_size  = 4M

innodb_log_files_in_group  = 3

innodb_max_dirty_pages_pct  = 90

innodb_lock_wait_timeout  = 120

innodb_file_per_table  = 0

[mysqldump]

quick

max_allowed_packet  = 2M

[mysqld_safe]

log-error=/db/3306/mysql_3306.err

pid-file=/db/3306/mysql.pid


[client]

port        = 3307

socket      = /db/3307/mysql.sock

[mysql]

no-auto-rehash

[mysqld]

user        = mysql

port        = 3307

socket      = /db/3307/mysql.sock

basedir     = /usr/local/mysql/

datadir     = /db/3307/data

open_files_limit    = 1024

back_log  = 600

max_connections  = 800

max_connect_errors  = 3000

table_cache  = 1024

external-locking    = FALSE

max_allowed_packet  = 16M

sort_buffer_size  = 8M

join_buffer_size  = 8M

thread_cache_size  = 100

thread_concurrency  = 8

query_cache_size  = 2M

query_cache_limit  = 1M

query_cache_min_res_unit  = 2k

#default_table_type  = InnoDB

thread_stack  = 192K

#transaction_isolation  = READ-COMMITTED

tmp_table_size  = 2M

max_heap_table_size  = 2M

long_query_time  = 1

pid-file=/db/3307/mysql.pid

relay-log  = /db/3307/relay-bin

relay-log-info-file  = /db/3307/relay-log.info

binlog_cache_size  = 1M

max_binlog_cache_size  = 1M

max_binlog_size  = 1M

key_buffer_size  = 16M

read_buffer_size  = 1M

read_rnd_buffer_size  = 1M

bulk_insert_buffer_size  = 1M

lower_case_table_names  = 1

skip-name-resolve

slave-skip-errors  = 1032,1062

replicate-ignore-db  = mysql

server-id  = 3

innodb_additional_mem_pool_size  = 4M

innodb_buffer_pool_size  = 32M

innodb_data_file_path  = ibdata1:28M:autoextend

innodb_file_io_threads  = 4

innodb_thread_concurrency  = 16

innodb_flush_log_at_trx_commit  = 2

innodb_log_buffer_size  = 8M

innodb_log_file_size  = 4M

innodb_log_files_in_group  = 3

innodb_max_dirty_pages_pct  = 90

innodb_lock_wait_timeout  = 120

innodb_file_per_table  = 0

[mysqldump]

quick

max_allowed_packet  = 2M

[mysqld_safe]

log-error=/db/3307/mysql_3307.err

pid-file=/db/3307/mysql.pid

完成后,/db目录结构:


1

2

3

4

5

6

7

8

[[email protected] ~]# tree /db

/db

├── 3306

│   ├── data

│   └── my.cnf

└── 3307

    ├── data

    └── my.cnf

6.创建mysql多实例启动文件(3307实例只需更改端口即可)


1

2

[[email protected] ~]# vim /db/3306/mysqld.py

[[email protected] ~]# vim /db/3307/mysqld.py

编写MySQL启动程序


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

#!/bin/env python

# -*- coding:utf-8 -*-

‘‘‘

MySQL多实例启动程序

‘‘‘

import os,sys,time

import subprocess

class Mysql_init:

    def __init__(self):

        self.user = ‘root‘

        self.port = ‘3306‘

        self.passwd = ‘q.123456‘

        self.Cmd_path = ‘/usr/local/mysql/bin‘

        self.sock = ‘/db/%s/mysql.sock‘%self.port

    def jindu(self):

        for i in range(2):

            sys.stdout.write(‘.‘)

            time.sleep(1)

            sys.stdout.flush()

        time.sleep(1)

        return ‘.‘

    def start(self):

        if os.path.exists(self.sock):

            print ‘MySQL already running.‘

        else:

            val = subprocess.call(‘/bin/sh %s/mysqld_safe --defaults-file=/db/%s/my.cnf 2>&1 >/dev/null &‘%(self.Cmd_path,self.port),shell=True)

            if val == 0:

                print ‘Starting MySQL‘,

                print ‘%s‘% self.jindu(),

                print ‘SUCCESS!‘.strip()

                return True

            else:

                print ‘MySQL start failed.‘

    def stop(self):

        if os.path.exists(self.sock):

            val = subprocess.call(‘%s/mysqladmin -u%s -p%s -S %s shutdown‘%(self.Cmd_path, self.user,self.passwd,self.sock),shell=True)

            if val == 0:

                print ‘Shutting down MySQL‘,

                print ‘%s‘%self.jindu(),

                print ‘SUCCESS!‘.strip()

                return True

            else:

                print ‘MySQL stop failed.‘

        else:

            print ‘MySQL already stopped.‘

    def restart(self):

        self.stop()

        self.start()

    def main(self):

        if sys.argv[1] == ‘start‘:

            self.start()

        elif sys.argv[1] == ‘stop‘:

            self.stop()

        elif sys.argv[1] == ‘restart‘:

            self.restart()

        else:

            print ‘Usage: mysqld  {start|stop|restart}  [ MySQL server options ]‘

if __name__ == ‘__main__‘:

    ret = Mysql_init()

    ret.main()

给程序加权限


1

2

3

[[email protected] 3306]# chmod +x mysqld.py

[[email protected] 3307]# chmod +x mysqld.py

[[email protected] ~]# chown mysql.mysql /db –R            # 授权

最终/db目录结构:


1

2

3

4

5

6

7

8

9

10

[[email protected] ~]# tree /db

/db

├── 3306

│   ├── data

│   ├── my.cnf

│   └── mysqld.py

└── 3307

    ├── data

    ├── my.cnf

    └── mysqld.py

7.配置mysql环境变量


1

2

[[email protected] ~]# echo ‘export PATH=/usr/local/mysql/bin:$PATH‘ >>/etc/profile

[[email protected] ~]# source /etc/profile

8.初始化mysql多实例数据库文件


1

2

3

[[email protected] ~]# cd /usr/local/mysql/scripts/

[[email protected] scripts]# ./mysql_install_db --basedir=/usr/local/mysql/ --datadir=/db/3306/data/  --user=mysql     # 3306

[[email protected] scripts]# ./mysql_install_db --basedir=/usr/local/mysql/ --datadir=/db/3307/data/  --user=mysql     # 3307

9.启动多实例mysql


1

2

3

4

[[email protected] ~]# /db/3306/mysqld.py start

Starting MySQL... SUCCESS!

[[email protected] ~]# /db/3307/mysqld.py start

Starting MySQL... SUCCESS!

10.为mysql多实例设置密码(安装好之后,默认没有密码)


1

2

[[email protected] ~]# mysqladmin -uroot -S /db/3306/mysql.sockpassword ‘q.123456‘

[[email protected] ~]# mysqladmin -uroot -S /db/3307/mysql.sockpassword ‘q.123456‘

11.登录mysql


1

2

[[email protected] ~]# mysql -uroot -pq.123456 -S /db/3306/mysql.sock

[[email protected]ave ~]# mysql -uroot -pq.123456 -S /db/3307/mysql.sock

12.权限设定(因为启动程序中带有mysql密码)


1

2

[[email protected] ~]# chmod 700 /db/{3306,3307}/mysqld.py

[[email protected] ~]# chown root.root /db/{3306,3307}/mysqld.py

时间: 2024-12-29 06:03:04

MySQL 第二篇的相关文章

详解MySQL第二篇—DML语句

DML 语句: DML 操作是指对数据库中表记录的操作,主要包括表记录的插入(insert).更新(update).删除(delete)和查(select),是开发人员日常使用最频繁的操作.下面将依次对它们进行介绍. 1.插入记录 表创建好后,就可以往里插入记录了,插入记录的基本语法如下: INSERT INTO tablename (field1,field2,--fieldn) VALUES(value1,value2,--valuesn); 例如,向表 emp 中插入以下记录:ename

MySQL 第二篇 武Sir

视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. 临时表搜索 1 2 3 4 5 6 7 8 9 10 11 12 13 14 SELECT     * FROM     (         SELECT             nid,             NAME         FROM             tb1         WHERE             ni

<邮件服务postfix+mysql>MAIL第二篇

环境:本服务是建立在第一篇的基础之上的,最好搭建好第一篇 玩此服务的前提是你的系统装好了msql和postfix服务. Postfix+mysql主要是把邮件服务的发与mysql结合使用.当然mysql要是一直是在命令行下使用也不是很方便对吧,下面我们来看linux图形化下mysql的使用: 下面的软件包. phpMyAdmin-2.11.3-all-languages.tar.gz是以php的格式结合Apache通过网页的形式管理mysql. 既然是使用网页管理mysql,当然很定得将这个软件

mysql配置主从复制 第二篇

经过查询资料,终于把mysql主从复制搞定了.此版本是mysql5.0的. 好了,开始说步骤. 首先,上篇已经说过了,需要复制一份安装文件到另外一个盘.接下来修改注册表. 好了,完了之后,我们修改mysql根目录下的my.ini文件. 当然,修改之前你需要备份一下.省的以后启动不起来. ----------------------------------------- 首先修改你要配置的主数据库的my.ini ----------------------------------------- [

linux下mysql主从复制(第二篇读写分离) mycat 中间件

linux下mysql主从复制(第二篇读写分离) mycat 中间件 接着上篇文档补全,mysql 读写分离,在上篇文章案例下准备好Mycat-server-1.4-release-20151019230038-win.tar.gz 解压包 1.解压后的文件如下: 1.1 接下来进入到conf 目录下配置四个文件server.xml.schema.xml.rule.xml.log4j.xml 下面一一介绍 1.2 首先在我们主服务上面test 库下新建两张表如下: CREATETABLE`t_u

mysql注入篇

博客这个东西真的很考验耐心,每写一篇笔记,都是在艰难的决定中施行的,毕竟谁都有懒惰的一面,就像这个,mysql注入篇,拖拖拖一直拖到现在才开始总结,因为这个实在是太多太杂了,细细的总结一篇太烧脑. 由于我没有找见php的实战本地源码,所以只好用一些漏洞平台的源码来演示了,演示不了的,只能列代码,没有实操图.毕竟找不见源码,,没法... 首先我们都知道mysql数据库和Access数据库的不同,不同在mysql是分多个数据库名的. 就像像我上图贴的这个格式一样,原谅我是在是没有本地源码,连数据库的

转载:eclipse 搭建SSH项目(第二篇,有具体的项目例子)

原文地址:http://blog.csdn.net/yeohcooller/article/details/9316923 读博文前应该注意: 本文提纲:本文通过一个用户注册的实例讲解SSH的整合.创建Struts项目,整合Hibernate,整合Spring.最后总结如何熟练创建SSH项目. 仅是创建SSH项目,对于其他的扩展例如Struts的国际化,Hibernate的缓存优化,Spring的AOP等,本博文涉及不到.想学习更多的东西请搜索其他博文. 本项目的环境:Windows 8-64位

log4CXX第二篇---配置文件(properties文件)详解

一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置. 1.Loggers Loggers组件在此系统中被分为六个级别:TRACE < DEBUG < INFO < WARN < ERROR < FATAL.这六个级别是有顺序的,分别用来指定这条日志

ansible系列第二篇(模块使用)

ansible系列第二篇(模块使用) 模块使用 设置ansible提权 在hosts文件加入sudo提权的密码: 18.18.23.102 ansible_become_pass='passwd' 执行: ansible test -S -R root -m shell -a "ls -l /" 查看ansible有那些模块: ansible-doc -l 获取各个模块详细帮助信息 ansible-doc -s ping ping模块: ansible test -m ping 从受控