zoukankan      html  css  js  c++  java
  • MySQL多实例安装配置实现

        首先我们要清楚什么是多实例?所谓多实例就是用多个配置文件来启动多个不同端口的进程,以不同的端口的形式为外提供服务。
    明白了多实例 我们下面的操作和配置就一目了然了
    首先我们要安装一套基础的应用程序,也就是说单实例这个流程请参考https://www.cnblogs.com/qiuhom-1874/p/9751195.html

    1.关闭单实例服务和开机启动

    /etc/init.d/mysqld stop
    chkconfig mysqld off

    2.创建好多实例的目录结构

    mkdir -p /mysql_multi_case/{3306..3308}/data
    

    3.分别在各个实例目录下写配置文件和启动脚本,

    以下是3306里面的my.cnf配置

    [client]
    port        = 3306                      
    socket      = /mysql_multi_case/3306/mysql.sock
    
    [mysqld]
    port        = 3306
    socket      = /mysql_multi_case/3306/mysql.sock
    basedir = /application/mysql
    datadir = /mysql_multi_case/3306/data
    open_files_limit = 1024
    back_log = 600
    max_connections = 800
    max_connect_errors = 3000
    table_cache = 614
    external-locking = FALSE
    max_allowed_packet = 8M
    sort_buffer_size = 1M
    join_buffer_size = 1M
    thread_cache_size = 100
    thread_concurrency = 2
    query_cache_size = 2M
    query_cache_limit = 1M
    query_cache_min_res_unit = 2k
    thread_stack = 192k
    tmp_table_size = 2M
    max_heap_table_size = 2M
    long_query_time = 1
    pid-file = /mysql_multi_case/3306/mysqld.pid
    log-bin = /mysql_multi_case/3306/mysqld-bin
    relay-log = /mysql_multi_case/3306/relay-bin
    relay-log-info-file = /mysql_multi_case/3306/relay-log.info
    expire_logs_days = 7
    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:128M:autoextend
    innodb_file_io_threads = 4
    innodb_thread_concurrency = 8
    innodb_flush_log_at_trx_commit = 2
    innodb_log_buffer_size = 2M
    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 = /mysql_multi_case/3306/mysql_lee3306.err
    pid-file = /mysql_multi_case/3306/mysqld.pid
    

      说明:这里说一下配置文件需要注意的是里面的端口信息必须是每个实例的端口是唯一的不能重复。启动脚本都是一样的,只是启动的端口信息不同,密码和用户看自己的喜好配置

    以下是3306里面的mysql启动脚本

    #!/bin/bash
    #
    #
    #
    #init
    port=3306
    mysql_user="root"
    mysql_pwd="admin"
    CmdPath="/application/mysql/bin"
    mysql_sock="/mysql_multi_case/${port}/mysql.sock"
    
    #startup function
    function_start_mysql(){
    	if [ ! -e "$mysql_sock" ];then
    	  printf "Starting MySQL...
    "
    	  /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/mysql_multi_case/${port}/my.cnf 2>&1 >/dev/null &
    	else
    	  printf "MySQL is running ... 
    "
    	  exit
    	fi
    }
    
    #stop function
    function_stop_mysql(){
    	if [ ! -e "$mysql_sock" ];then
    	  printf "MySQL is stopped ... 
    "
    	  exit
    	else
    	  printf "Stopping MySQL ... 
    "
    	  ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /mysql_multi_case/${port}/mysql.sock shutdown
    	fi
    }
    
    #restart function
    function_restart_mysql(){
    	printf "Restarting MySQL ... 
    "
    	function_stop_mysql
    	sleep 2
    	function_start_mysql
    } 
    
    case $1 in
    start)
    	function_start_mysql
    	;;
    stop)
    	function_stop_mysql
    	;;
    restart)
    	function_restart_mysql
    	;;
    *)
    	printf "Usage: /mysql_multi_case/${port}/mysql {start|stop|restart} 
    "
    esac
    

      说明:以上脚本最核心的就是两个命令,第一个就是mysqld_safe --defaults-file指定默认配置文件来启动数据库,第二个命令就是mysqladmin 指定用户名和密码 同时指定mysql.sock文件 shutdown 来关闭mysql对应的实例,restart 的思想就是先调用stop函数,在调用start函数。3307和3308的启动脚本和以上一样的,唯一的区别是端口不同。

    4.写好了配置文件和启动脚本后,接下来是对目录结构授权,以及给脚本加可执行权限

    chown -R mysql:mysql /mysql_multi_case                                   ####更改整个目录属组属主
    find /mysql_multi_case/ -type f -name 'mysql'|xargs chmod +x                     ####对所有实例的启动脚本增加可执行权限
    

    5.初始化数据库

    cd /application/mysql/scripts
    ./mysql_install_db --basedir=/application/mysql/ --datadir=/mysql_multi_case/3306/data --user=mysql
    

      说明:数据库的初始化就是执行我们单实例程序的scripts目录里的mysql_install_db脚本,指定basedir 和datadir 还有用户,来初始化数据库,执行以上初始化脚本后 如果返回

    Installing MySQL system tables...
    OK
    Filling help tables...
    OK
    

     说明:返回两个OK 那么就表示数据文件已经初始化完成,其实初始化的作用就是导入基本的数据库表格文件呀,系统表呀等,我们可以进到我们初始化指定的data目录里看,多了许多文件。 

    6.启动每个多实例服务

    /mysql_multi_case/3306/mysql start
    /mysql_multi_case/3307/mysql start
    /mysql_multi_case/3308/mysql start

      说明:启动服务就是调用我们之前写启动脚本。

    检查服务是否启动起来

    ss -lnt|egrep "3306|3307|3308"
    

      说明:如果能够检查到3306、3307、3308这些端口 那么表示服务已经正常运行。

    接下来是我们给数据库设置登录密码,默认情况root是空密码

    mysqladmin -uroot password admin -S /mysql_multi_case/3306/mysql.sock
    mysqladmin -uroot password admin -S /mysql_multi_case/3307/mysql.sock
    mysqladmin -uroot password admin -S /mysql_multi_case/3308/mysql.sock

      说明:本人是测试环境所有用的是弱密码,正式环境不建议。以上命令的意思就是给root用户设置密码成admin(这是初始化root密码为空的情况),值得注意的是 多实例一定要指定mysql的sock文件,mysqladmin -uroot -padmin password adminn123 -S /mysql_multi_case/3306/mysql.sock这种情况就是给root用户更改密码,其实这些命令不用去记,我们初始化两个ok的界面,系统会告诉我们。

    6.设置开机启动

    echo "/mysql_multi_case/3306/mysql start" >>/etc/rc.local
    echo "/mysql_multi_case/3307/mysql start" >>/etc/rc.local
    echo "/mysql_multi_case/3308/mysql start" >>/etc/rc.local
    

    7.登录mysql 

    7.1本地登录

    mysql -uroot -padmin -S /mysql_multi_case/3306/mysql.sock

    7.2远程登录

    mysql -uroot -padmin -h 192.168.11.107 -P 11319 -S /mysql_multi_case/3306/mysql.sock
    

      说明:多实例的登录和单实例不同,多实例需要指定不同的mysql.sock文件来登录对应的mysql实例,本地登录不需要指定主机和端口,远程登录需要指定主机地址和端口,注意指定端口是-P(大写) -p(小写)是指定密码字符串 -S是指定mysql.sock文件。

    关于远程用户授权请参考https://www.cnblogs.com/qiuhom-1874/p/9741166.html

  • 相关阅读:
    UVA 401 回文词
    n的阶乘分解成素数幂的积
    DSSM问答匹配模型
    Enhanced LSTM for Natural Language Inference
    Bidirectional LSTM-CRF Models for Sequence Tagging
    Attention Is All You Need 学习笔记
    BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
    C++学习笔记(四)
    C++学习笔记(三)
    java学习笔记(七)
  • 原文地址:https://www.cnblogs.com/qiuhom-1874/p/9757061.html
Copyright © 2011-2022 走看看