MySQL多实例部署与优化

MySQL安装

 1 ##上传MySQL安装包##
 2 mkdir /home/oldboy/tools -p
 3 cd /home/oldboy/tools/
 4 ###wget -q http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.34.tar.gz 
 5 ####安装依赖
 6 yum install ncurses-devel libaio-devel -y
 7 ###yum安装cmake
 8 yum install cmake -y
 9 ###添加MySQL用户
10 useradd -s /sbin/nologin -M mysql
11 id mysql
12 ####解压MySQL安装包
13 tar xf mysql-5.6.34.tar.gz
14 cd mysql-5.6.34
15 ####编译
16 cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.34 \
17 -DMYSQL_DATADIR=/application/mysql-5.6.34/data \
18 -DMYSQL_UNIX_ADDR=/application/mysql-5.6.34/tmp/mysql.sock \
19 -DDEFAULT_CHARSET=utf8 \
20 -DDEFAULT_COLLATION=utf8_general_ci \
21 -DWITH_EXTRA_CHARSETS=all \
22 -DWITH_INNOBASE_STORAGE_ENGINE=1 \
23 -DWITH_FEDERATED_STORAGE_ENGINE=1 \
24 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
25 -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
26 -DWITH_ZLIB=bundled \
27 -DWITH_SSL=bundled \
28 -DENABLED_LOCAL_INFILE=1 \
29 -DWITH_EMBEDDED_SERVER=1 \
30 -DENABLE_DOWNLOADS=1 \
31 -DWITH_DEBUG=0
32 echo $?
33 make && make install
34 echo $?
35 ln -s /application/mysql-5.6.34/ /application/mysql
36 ####初始化数据库
37 cp support-files/my*.cnf /etc/my.cnf
38 /application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data --user=mysql
39 
40 cp support-files/mysql.server /etc/init.d/mysqld
41 chmod 700 /etc/init.d/mysqld
42 chkconfig mysqld on
43 chkconfig --list mysqld
44 
45 ##启动数据库
46 /etc/init.d/mysqld start
47 echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile
48 tail -1 /etc/profile
49 source /etc/profile
50 echo $PATH
51 mysql
52 
53 ###出现问题查看日志
54 tail -100 /application/mysql/data/db01.err
55 
56 ###优化数据库
57 ###设置密码
58 mysqladmin -uroot -p password oldboy123
59 ###清理无用的库,无用的用户
60 show databases;
61 drop database test;
62 select user,host from mysql.user;
63 drop user 'root'@'::1';
64 select user,host from mysql.user;
65 drop user ''@'db01';
66 drop user 'root'@'db01';
67 drop user ''@'localhost';
68 select user,host from mysql.user;
69 #################以上单实例#####################
mysql的安装

第1章 MySQL多实例配置

1.1 什么是MySQL多实例?

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

这些MySQL多实例共用一套MySQL安装程序,使用不同的my.cnf(也可以相同)配置文件、启动程序(也可以相同)和数据文件。在提供服务时,多实例MySQL在逻辑上看来是各自独立的,它们根据配置文件的对应设定值,获得服务器相应数量的硬件资源。

打个比方吧,MySQL多实例就相当于房子的多个卧室,每个实例可以看作一间卧室,整个服务器就是一套房子,服务器的硬件资源(cpu,men,disk)、软件资源(CentOS操作系统)可以看作房子的卫生间、厨房、客厅,是房子的共用资源。若你是北漂的小伙伴,与朋友一起租房子,相信更好理解,大家蜗居在一起,休息在自己的卧室,出来活动肯定是要共用上述公共资源。这样就可以很好的理解MySQL多实例了。

 

其实很多网络服务都是可以配置多实例的,例如nginx、Apache、haproxy、redis等都可以配置多实例。这在门户网站使用都很广泛。

1.2 MySQL多实例的作用于问题

  • 有效利用服务器资源

当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务,且可以实现资源的逻辑隔离。

  • 节约服务器资源

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

MySQL多实例有它的好处,但也有其弊端,比如,会存在资源互相抢占的问题。

当某个数据库实例并发很高或者有SQL慢查询时,整个实例会消耗大量的系统CPU、磁盘I/O等资源,导致服务器上的其他数据库实例提供服务的质量一起下降。这就相当于大家住在一个房子的不同卧室一样,早晨起来上班,都要刷牙、洗脸等,这样卫生间就会长期占有,其他人就要等待一样。不同实例获取的资源是相对独立的,无法像虚拟化一样完全隔离。

1.3 MySQL多实例的生产应用场景

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

若公司资金紧张,公司业务访问量又不是太大,但又希望不同业务的数据库服务各自尽量独立地提供服务而互相不受影响,同时,还需要主从复制等技术提供备份或读写分离服务,那么,多实例就再好不过了。比如:可以通过3台服务器部署9~15个实例,交叉做主从复制、数据备份及读写分离,这样就可以达到9~15台服务器每个只装一个数据库才有的效果。这里要强调的是,所谓的尽量独立是相对的。

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

当公司业务访问量不太大的时候,服务器的资源基本都是浪费的,这时就很适合多实例的应用,如果对SQL语句的优化做得比较好,MySQL多实例会是一个很值得使用的技术,即使并发很大,合理分配好系统资源以及搭配好服务,也不会有太大问题。

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

    门户网站通常都会使用多实例,因为配置硬件好的服务器,可节省IDC机柜空间,同时,跑多实例也会减少硬件资源跑不满的浪费。比如:百度公司的很多数据库都是多实例,不过,一般是从库多实例,例如某部门使用的IBM服务器为48核CPU,内存96GB,一台服务器跑3~4个实例;此外,sina网也是用的多实例,内存48GB左右。

说明:据调查,sina网的数据库单机1~4个数据库实例的居多,其中又数1~2个的最多,因为大业务占用的机器比较多。服务器是DELL R510的居多,CPU是E5210,48GB内存,磁盘12*300GSAS,做RAID10,此为门户网站的服务器配置参考。

    另外,sina网站安装数据库时,一般采用编译安装的方式,并且会在进行优化之后做rpm包,以便统一使用。

1.4 配置MySQL多实例

上传文件地址:

链接:https://pan.baidu.com/s/14nfi-bHweexKO5dJAoZyMA 密码:nmko

 1 ##关闭单实例,跟多实例端口有冲突
 2 /etc/init.d/mysqld stop
 3 chkconfig mysqld off
 4 chkconfig --list|grep mys
 5 ####创建目录##
 6 mkdir -p /data/{3306,3307}/data
 7 ###上传配置文件到根下,并解压###
 8  
 9 chown -R mysql.mysql /data/
10 find /data -name mysql
11 find /data -name mysql|xargs chmod 700
12 find /data -name mysql|xargs ls -l
13 ####初始化数据库
14 cd /application/mysql/scripts
15 ./mysql_install_db  --defaults-file=/data/3306/my.cnf --basedir=/application/mysql --datadir=/data/3306/data --user=mysql
16 ./mysql_install_db  --defaults-file=/data/3307/my.cnf --basedir=/application/mysql --datadir=/data/3307/data --user=mysql
17 ####配置环境变量###
18 #echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile
19 #source  /etc/profile
20 ####启动数据库###
21 /data/3306/mysql start
22 /data/3307/mysql start
23 netstat -lntup|grep 330
24 ###登录数据库####
25 mysql -S /data/3306/mysql.sock 
26 mysql -S /data/3307/mysql.sock
多实例

1.5 增加一个实例3308

 1 ####增加一个实例3308####
 2 mkdir -p /data/3308/data
 3 
 4 cd /data/3308
 5 vim my.cnf
 6 [client]
 7 port            = 3308
 8 socket          = /data/3308/mysql.sock
 9 
10 [mysql]
11 no-auto-rehash
12 
13 [mysqld]
14 user    = mysql
15 port    = 3308
16 socket  = /data/3308/mysql.sock
17 basedir = /application/mysql
18 datadir = /data/3308/data
19 open_files_limit    = 1024
20 back_log = 600
21 max_connections = 800
22 max_connect_errors = 3000
23 table_open_cache = 614
24 external-locking = FALSE
25 max_allowed_packet =8M
26 sort_buffer_size = 1M
27 join_buffer_size = 1M
28 thread_cache_size = 100
29 thread_concurrency = 2
30 query_cache_size = 2M
31 query_cache_limit = 1M
32 query_cache_min_res_unit = 2k
33 #default_table_type = InnoDB
34 thread_stack = 192K
35 #transaction_isolation = READ-COMMITTED
36 tmp_table_size = 2M
37 max_heap_table_size = 2M
38 #long_query_time = 1
39 #log_long_format
40 #log-error = /data/3308/error.log
41 #log-slow-queries = /data/3308/slow.log
42 pid-file = /data/3308/mysql.pid
43 #log-bin = /data/3308/mysql-bin
44 relay-log = /data/3308/relay-bin
45 relay-log-info-file = /data/3308/relay-log.info
46 binlog_cache_size = 1M
47 max_binlog_cache_size = 1M
48 max_binlog_size = 2M
49 expire_logs_days = 7
50 key_buffer_size = 16M
51 read_buffer_size = 1M
52 read_rnd_buffer_size = 1M
53 bulk_insert_buffer_size = 1M
54 lower_case_table_names = 1
55 skip-name-resolve
56 slave-skip-errors = 1032,1062
57 replicate-ignore-db=mysql
58 server-id = 8
59 innodb_additional_mem_pool_size = 4M
60 innodb_buffer_pool_size = 32M
61 innodb_data_file_path = ibdata1:128M:autoextend
62 innodb_file_io_threads = 4
63 innodb_thread_concurrency = 8
64 innodb_flush_log_at_trx_commit = 2
65 innodb_log_buffer_size = 2M
66 innodb_log_file_size = 4M
67 innodb_log_files_in_group = 3
68 innodb_max_dirty_pages_pct = 90
69 innodb_lock_wait_timeout = 120
70 innodb_file_per_table = 0
71 [mysqldump]
72 quick
73 max_allowed_packet = 2M
74 
75 [mysqld_safe]
76 log-error=/data/3308/oldboy_3308.err
77 pid-file=/data/3308/mysqld.pid
增加一个实例3308
 1 vim mysql
 2 #!/bin/sh
 3 ################################################
 4 #this scripts is created by oldboy at 2007-06-09
 5 #oldboy QQ:31333741
 6 #site:http://www.etiantian.org
 7 #blog:http://oldboy.blog.51cto.com
 8 #oldboy trainning QQ group: 208160987 226199307  44246017
 9 ################################################
10 #init
11 port=3308
12 mysql_user="root"
13 mysql_pwd="oldboy123"
14 CmdPath="/application/mysql/bin"
15 mysql_sock="/data/${port}/mysql.sock"
16 start(){
17     if [ ! -e "$mysql_sock" ];then
18          printf "Starting MySQL...\n"
19         /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &
20     else
21         printf "MySQL is running...\n"
22         exit 1
23     fi
24 }
25 stop(){
26     if [ ! -e "$mysql_sock" ];then
27         printf "MySQL is stopped...\n"
28         exit 1
29     else
30         printf "Stoping MySQL...\n"
31         ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown
32     fi
33 }
34 
35 restart(){
36     printf "Restarting MySQL...\n"
37     stop
38     sleep 2
39     start
40 }
对应脚本

1.6 快速增加一个实例3308

 1 ####快速增加实例####
 2 mkdir -p /data/3308/data
 3 \cp /data/3306/my.cnf  /data/3308/
 4 \cp /data/3306/mysql  /data/3308/
 5 sed -i 's/3306/3308/g' /data/3308/my.cnf 
 6 sed -i 's/server-id = 6/server-id = 8/g' /data/3308/my.cnf 
 7 sed -i 's/3306/3308/g' /data/3308/mysql
 8 chown -R mysql:mysql /data/3308
 9 chmod 700 /data/3308/mysql
10 cd /application/mysql/scripts
11 ./mysql_install_db --defaults-file=/data/3308/my.cnf --datadir=/data/3308/data --basedir=/application/mysql --user=mysql
12 chown -R mysql:mysql /data/3308
13 egrep "server-id|log-bin" /data/3308/my.cnf 
14 /data/3308/mysql start
15 sleep 5
16 netstat -lnt|grep 3308
View Code

1.7 为数据库设置密码

1 ####
2 mysqladmin -uroot -p password oldboy123 -S /data/3308/mysql.sock
3 mysqladmin -uroot -p password oldboy123 -S /data/3307/mysql.sock
4 mysqladmin -uroot -p password oldboy123 -S /data/3306/mysql.sock
View Code

1.8 MySQL关闭优化

 1 ####优化关闭MySQL####
 2 [root@db01 3306]# cat /data/3306/mysql_oldboy
 3 #!/bin/sh
 4 #init
 5 port=3306
 6 mysql_user="root"
 7 mysql_pwd="oldboy123"
 8 CmdPath="/application/mysql/bin"
 9 mysql_sock="/data/${port}/mysql.sock"
10 mysqld_pid_file_path=/application/mysql/3306.pid
11 start(){
12     if [ ! -e "$mysql_sock" ];then
13          printf "Starting MySQL...\n"
14         /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf --pid-file=$mysqld_pid_file_path 2>&1 > /dev/null &
15         sleep 3
16     else
17         printf "MySQL is running...\n"
18         exit 1
19     fi
20 }
21 stop(){
22     if [ ! -e "$mysql_sock" ];then
23         printf "MySQL is stopped...\n"
24         exit 1
25     else
26         printf "Stoping MySQL...\n"
27         mysqld_pid=`cat "$mysqld_pid_file_path"`
28          if (kill -0 $mysqld_pid 2>/dev/null)
29            then
30              kill $mysqld_pid
31              sleep 2
32          fi
33     fi
34 }
35 
36 restart(){
37     printf "Restarting MySQL...\n"
38     stop
39     sleep 2
40     start
41 }
42 
43 case "$1" in
44     start)
45         start
46     ;;
47     stop)
48         stop
49     ;;
50     restart)
51         restart
52     ;;
53     *)
54         printf "Usage: /data/${port}/mysql {start|stop|restart}\n"
55 esac
56 
57 sh -x /data/3306/mysql_oldboy stop
优化

1.9 不用密码登录配置

 1 ###以前面配置的单实例MySQL为例
 2 ###不用密码登录
 3 [root@db01 3306]# head /etc/my.cnf
 4 # For advice on how to change settings please see
 5 # http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
 6 # *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
 7 # *** default location during install, and will be replaced if you
 8 # *** upgrade to a newer version of MySQL.
 9 [client]          
10 user=root         
11 password=oldboy123
12 [root@db01 3306]# chmod 700 /etc/my.cnf
/etc/my.cnf文件

1.10 数据库管理

#####数据库管理###

help contents; #查看帮助,help可以用?替代

Account Management

账户管理

Administration

管理

Compound Statements

复合语句

Data Definition

数据定义

Data Manipulation

数据操作

Data Types

数据类型

Functions

函数

Functions and Modifiers for Use with GROUP BY

与GROUP BY相关的函数和修饰符

Geographic Features

地理特征

Help Metadata

帮助元数据

Language Structure

语言结构

Plugins

插件

Procedures

存储过程

Storage Engines

存储引擎

Table Maintenance

表维护

Transactions

事务处理

User-Defined Functions

用户自定义函数

Utility

实用程序

1.11 MySQL密码忘记找回

1 ###MySQL密码忘记####
2 mysqld_safe --skip-grant-tables --user=mysql &
3 #mysqld_safe --defaults-file=/data/3307/my.cnf --skip-grant-tables >/dev/null 2>&1 &
4 mysql
5 #用户@主机    唯一标识
6 mysql> update mysql.user set password=PASSWORD('old') where user='root' and host='localhost';
7 mysql> flush privileges;
8 /etc/init.d/mysqld stop
9 /etc/init.d/mysqld start
MySQL密码忘记

猜你喜欢

转载自www.cnblogs.com/zhaojingyu/p/8874125.html
今日推荐