设为首页 收藏本站
查看: 750|回复: 0

[经验分享] Mysql DBA 高级运维学习之路-Mysql常见多实例配置方案及多实例安装

[复制链接]

尚未签到

发表于 2018-10-6 11:58:00 | 显示全部楼层 |阅读模式
6.1   MySQL多实例常见配置方案

6.1.1 多实例配置文件部署方案
  通过配置多个配置文件及多个启动程序来实现多实例的方案
  

[root@mysql ~]# tree -L 2 /data/  
/data/
  
├── 3306
  
│   ├── data
  
│   ├── my.cnf
  
│   └── mysql
  
└── 3307
  
├── data
  
├── my.cnf
  
└── mysql
  

  原则:降低耦合性

6.2    安装多实例MySQL数据库

6.2.1    创建MySQL多实例的数据文件目录
  MySQL的安装上篇已经写了,这里就不再安装了。我们的数据文件目录采用的是/data目录作为mysql多实例总的根目录,然后规划不同的MySQL实例端口号来作为/data下面的二级目录,不同的端口号就是不同的实例目录以区别不同的实例,二级目录下包含mysql数据文件、配置文件以及启动文件的目录。
  (1) 创建相关mysql多实例的目录 如下
  

#####我们先把安装的单实例mysql停掉,要不然会冲突  
[root@mysql ~]# pkill mysqld
  
#####然后把之前安装的单实例mysql的启动文件删掉,以后就不用这个方法启动了
  
[root@mysql ~]# rm -f /etc/init.d/mysqld
  
提示:多实例mysql的安装和单实例mysql的安装在make && make install之后就不同了。
  
#####创建多实例目录,我们这里创建两个实例,如果想创建3个、4个同理往下增加即可。
  
[root@mysql ~]# mkdir -p /data/{3306,3307}/data
  
[root@mysql ~]# tree /data/
  
/data/ 总的多实例根目录
  
├── 3306        3306实例的目录
  
│   └── data    3306实例的数据文件目录
  
└── 33307       3307实例的目录
  
└── data        3307实例的数据文件目录
  
4 directories, 0 files
  

6.2.2     创建MySQL多实例的配置文件
  MySQL数据库默认为用户提供了多个配置文件模板,用户可以根据硬件配置大小来选择
  

[root@mysql mysql-5.5.32]# ls -l support-files/*.cnf  

  
-rw-r--r--. 1 root root  4723 1月  11 05:31 support-files/my-huge.cnf
  

  
-rw-r--r--. 1 root root 19791 1月  11 05:31 support-files/my-innodb-heavy-4G.cnf
  

  
-rw-r--r--. 1 root root  4697 1月  11 05:31 support-files/my-large.cnf
  

  
-rw-r--r--. 1 root root  4708 1月  11 05:31 support-files/my-medium.cnf
  

  
-rw-r--r--. 1 root root  2872 1月  11 05:31 support-files/my-small.cnf
  

  上面是单实例的配置文件的默认配置文件模板,配置多实例就不同了为了保证多实例之间彼此独立。因此,我们为每一个实例建立一个配置文件,一个启动文件,对应自己的数据文件。
  在实际工作中可以拿早已修改好的模板来进行修改,通过rz命令等方式上传配置文件模板my.cnf文件。
  我们在mysql安装包目录拷贝一个数据库文件重命名为my.cnf,然后将my.cnf内容清空,添加下面内容。下面是3306的配置文件,3307的配置文件要把my.cnf中的3306替换成3307,注意3307中的server-id值一定要修改不能3306中的server-id一样。
  

[root@mysql ~]# cp /home/zbf/mysql-5.5.32/support-files/my-small.cnf /data/3306/my.cnf  
[root@mysql 3306]# > my.cnf
  
[root@mysql 3306]# vim my.cnf
  1 [client]
  2 port= 3306
  3 socket  = /data/3306/mysql.sock
  4 [mysql]
  5 no-auto-rehash
  6 [mysqld]
  7 user= mysql
  8 port= 3306
  9 socket  = /data/3306/mysql.sock
  10 basedir = /usr/local/mysql
  11 datadir = /data/3306/data
  12 open_files_limit= 1024
  13 back_log = 600
  14 max_connections = 800
  15 max_connect_errors = 3000
  16 table_cache = 614
  17 external-locking = FALSE
  18 max_allowed_packet =8M
  19 sort_buffer_size = 1M
  20 join_buffer_size = 1M
  21 thread_cache_size = 100
  22 thread_concurrency = 2
  23 query_cache_size = 2M
  24 query_cache_limit = 1M
  25 query_cache_min_res_unit = 2k
  26 #default_table_type = InnoDB
  27 thread_stack = 192K
  #transaction_isolation = READ-COMMITTED
  29 tmp_table_size = 2M
  30 max_heap_table_size = 2M
  31 long_query_time = 1
  32 #log_long_format
  33 #log-error = /data/3306/error.log
  34 #log-slow-queries = /data/3306/slow.log
  35 pid-file = /data/3306/mysql.pid
  36 log-bin = /data/3306/mysql-bin

  37>
  38>  39 binlog_cache_size = 1M
  40 max_binlog_cache_size = 1M
  41 max_binlog_size = 2M
  42 expire_logs_days = 7
  43 key_buffer_size = 16M
  44 read_buffer_size = 1M
  45 read_rnd_buffer_size = 1M
  46 bulk_insert_buffer_size = 1M
  47 #InnoDB_sort_buffer_size = 1M
  48 #InnoDB_max_sort_file_size = 10G
  49 #InnoDB_max_extra_sort_file_size = 10G
  50 #InnoDB_repair_threads = 1
  51 #InnoDB_recover
  52 lower_case_table_names = 1
  53 skip-name-resolve
  54 slave-skip-errors = 1032,1062
  55 replicate-ignore-db=mysql
  56 server-id = 1
  57 innodb_additional_mem_pool_size = 4M
  58 innodb_buffer_pool_size = 32M
  59 innodb_data_file_path = ibdata1:128M:autoextend
  60 innodb_file_io_threads = 4
  61 innodb_thread_concurrency = 8
  62 innodb_flush_log_at_trx_commit = 2
  63 innodb_log_buffer_size = 2M
  64 innodb_log_file_size = 4M
  65 innodb_log_files_in_group = 3
  66 innodb_max_dirty_pages_pct = 90
  67 innodb_lock_wait_timeout = 120
  68 innodb_file_per_table = 0
  69 [mysqldump]
  70 quick
  71 max_allowed_packet = 2M
  [mysqld_safe]
  73 log-error=/data/3306/mysql_zbf3306.err
  74 pid-file=/data/3306/mysqld.pid
  

6.2.3     创建启动文件
  下面是3306实例的配置文件,配置3307实例的配置文件只需要把3306实例配置文件中的3306替换成3307。
  

#!/bin/bash  
cmdPath="/usr/local/mysql/bin"
  
myPath="/data/3306"
  
softPath="/usr/local/mysql"
  
socketfile="$myPath/mysql.sock"
  
my_user="root"
  
my_pass="123456"  数据库设置的密码是多少这里就填多少
  
start(){
  
if [ ! -e "$socketfile" ];then
  
printf "Starting MySQL......\n"
  
/bin/sh   ${cmdPath}/mysqld_safe --defaults-file=${myPath}/my.cnf --user=mysql \
  
--basedir=${softPath} --datadir=${myPath}/data &>/dev/null &
  
sleep 2
  else
  
printf "Mysqld is running....\n" && exit 1
  fi
  
}
  
stop(){
  if [ ! -e "$socketfile" ];then
  
printf "MySQL is stopped...\n"
  exit 1
  else
  printf "Stoping MySQL....\n"
  mysqladmin -u"${my_user}" -p"${my_pass}" \
  -S "$socketfile" shutdown
  fi
  
}
  
restart(){
  printf "Restarting MySQL...\n"
  
stop
  sleep 2
  
start
  
}
  
case "$1" in
  start)
  
start
  ;;
  stop)
  
stop
  ;;
  restart)
  
restart
  ;;
  *)
  
printf "Usage: $myPath/mysql {start|stop|restart}\n"
  
exit 1
  ;;
  
esac
  

  最终效果图如下
  

[root@mysql ~]# tree  /data  
/data
  
├── 3306
  
│   ├── data
  
│   ├── my.cnf  3306实例的配置文件
  
│   └── mysql       3306实例的启动文件
  
└── 3307
  
├── data
  
├── my.cnf  3307实例的配置文件
  
└── mysql   3307实例的启动文件
  

  多实例启动文件启动mysql服务实质
  

mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 > /dev/null &  
mysqld_safe --defaults-file=/data/3307/my.cnf 2>&1 > /dev/null &
  

  多实例启动文件的平滑停止mysql服务实质
  

mysqladmin -u root -p123456 -S /data/3306/mysql.sock shutdown  
mysqladmin -u root -p123456 -S /data/3307/mysql.sock shutdown
  

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

[root@mysql ~]# chown -R mysql.mysql /data  
[root@mysql ~]# find /data -name mysql
  
/data/3306/mysql
  
/data/3307/mysql
  

6.2.5 授权mysql多实例服务所有启动文件mysql可执行
  

[root@mysql ~]# find /data -type f -name "mysql"|xargs ls -l  
-rw-r--r--. 1 mysql mysql 1604 1月  12 17:06 /data/3306/mysql
  
-rw-r--r--. 1 mysql mysql 1604 1月  12 17:06 /data/3307/mysql
  
[root@mysql ~]# find /data -type f -name "mysql"|xargs chmod +x
  
[root@mysql ~]# find /data -type f -name "mysql"|xargs ls -l
  
-rwxr-xr-x. 1 mysql mysql 1604 1月  12 17:06 /data/3306/mysql
  
-rwxr-xr-x. 1 mysql mysql 1604 1月  12 17:06 /data/3307/mysql
  

6.2.6 配置MySQL命令全局使用路径
  前面cmake安装mysql的时候已经配过了,这里就不配了。配完全局变量使用mysql命令就能找到了。
  

[root@mysql ~]# tail -1 /etc/profile  
export PATH=/usr/local/mysql/bin:$PATH
  

6.2.7 初始化MySQL多实例的数据库文件
  (1)初始化命令
  mysql5.1.X初始化命令
  

mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/3307/data/ --user=mysql  
mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/3307/data/ --user=mysql
  

  mysql5.5.32初始化命令
  [root@mysql ~]# cd /home/zbf/mysql-5.5.32/scripts/
  要在scripts下执行,不在mysql bin下。注意要在当前目录下执行加 ./。
  

./mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/3306/data/ --user=mysql  
./mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/3307/data/ --user=mysql
  

  (2)为什么要初始化数据库?
  a.  初始化的主要目的就是创建基础的数据库文件,例如生成mysql库表。
  b.  初始化后可以查看对应的实例数据库目录,可以看到如下文件。

6.2.8    启动mysql服务
  

/data/3306/mysql start  
/data/3307/mysql start
  

6.2.9 MySQL故障排错多实例数据库
  如果mysql没有起来排查方法如下
  (1)如果发现没有显示MySQL的端口,请等待几秒mysql服务启动会有点慢。
  (2)如果还是不行,请查看错误日志,错误日志路径在my.cnf配置文件路径下面。
  grep log-error /data/3306/mysql_zbf3306.err|tail -1
  (3)细看所有执行命令返回的输出,不要忽略关键的输出结果。
  (4)查看系统的/var/log/messages。
  (5)如果是关联服务,要同时查看相关服务的LOG。

6.2.10 Mysql多实例登录
  Mysql安装完成后,默认情况下管理员账号root是无密码的。登录不同的mysql数据库需要指定不同库的sock路径。如果是远程的话就指定IP地址。
  

[root@mysql ~]# mysql -S /data/3306/mysql.sock  
[root@mysql ~]# mysql -S /data/3307/mysql.sock
  

6.3   MySQL安全配置

6.3.1 为root增加密码
  

mysqladmin -u root -S /data/3306/mysql.sock password '123456'  
mysqladmin -u root -S /data/3307/mysql.sock password '123456'
  

  ###设置完数据路密码登录数据库的方法
  

[root@mysql 3306]# mysql -uroot -p123456 -S /data/3306/mysql.sock  
[root@mysql 3306]# mysql -uroot -p123456 -S /data/3307/mysql.sock
  

6.3.2 为mysql多实例启动脚本修改执行权限,只允许root用户有执行权限
  

[root@mysql ~]# find /data -type f -name "mysql" -exec ls -l {} \;  
-rwxr-xr-x 1 mysql mysql 1252 1月  15 02:18 /data/3306/mysql
  
-rwxr-xr-x 1 mysql mysql 1252 1月  15 04:45 /data/3307/mysql
  
[root@mysql ~]# find /data -type f -name "mysql" -exec chmod 700 {} \;
  
[root@mysql ~]# find /data -type f -name "mysql" -exec chown 700 {} \;
  
[root@mysql ~]# find /data -type f -name "mysql" -exec ls -l {} \;
  
-rwx------ 1 root root 1252 1月  15 02:18 /data/3306/mysql
  
-rwx------ 1 root root 1252 1月  15 04:45 /data/3307/mysql



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-613724-1-1.html 上篇帖子: Mysql DBA高级运维学习之路-Mysql数据库的多种安装方法 下篇帖子: Mysql备份恢复学习笔记
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表