zoukankan      html  css  js  c++  java
  • [MySQL] MySQL的自己主动化安装部署

    有过MySQL运维的人应该都清楚,线上的MySQL一般都採用源代码编译,由于这样才干够依据企业的各自须要选择要编译的功能,尽管MySQL的源代码编译挺简单的,可是试想一下,假设你有几百台server同一时候要安装MySQL,难道你还一台台去手动编译、编写配置文件吗?这显然太低效了,本文讨论MySQL的自己主动化安装部署。

    1、制作符合自己需求的RPM包

    我们要依据MySQL的源代码编译符合企业需求的RPM包,源代码获取命令例如以下:
    wget http://downloads.mysql.com/archives/get/file/mysql-5.6.16.tar.gz
    tar -zxvf mysql-5.6.16.tar.gz
    cd mysql-5.6.16
    mkdir rpm
    cd rpm
    
    在上面我们获取了源代码,并在源代码主文件夹下创建rpm文件夹,接着我们在该文件夹下创建mysql.spec文件:
    Name: mysql
    Version:5.6.16
    Release: guahao
    License: GPL
    URL: http://downloads.mysql.com/archives/get/file/mysql-5.6.16.tar.gz
    Group: applications/database
    BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root 
    BuildRequires: cmake
    Packager: zhuxj@guahao.com
    Autoreq: no
    prefix: /opt/mysql
    Summary: MySQL 5.6.16
    
    %description 
    The MySQL(TM) software delivers a very fast, multi-threaded, multi-user,
    and robust SQL (Structured Query Language) database server. MySQL Server
    is intended for mission-critical, heavy-load production systems as well
    as for embedding into mass-deployed software.
    
    %define MYSQL_USER mysql
    %define MYSQL_GROUP mysql
    %define __os_install_post %{nil}
    
    %build
    cd $OLDPWD/../
    CFLAGS="-O3 -g -fno-exceptions -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing"
    CXX=g++
    CXXFLAGS="-O3 -g -fno-exceptions -fno-rtti -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing"
    export CFLAGS CXX CXXFLAGS
    
    cmake .                                                  
      -DSYSCONFDIR:PATH=%{prefix}                            
      -DCMAKE_INSTALL_PREFIX:PATH=%{prefix}                  
      -DCMAKE_BUILD_TYPE:STRING=Release                      
      -DENABLE_PROFILING:BOOL=ON                             
      -DWITH_DEBUG:BOOL=OFF                                  
      -DWITH_VALGRIND:BOOL=OFF                               
      -DENABLE_DEBUG_SYNC:BOOL=OFF                           
      -DWITH_EXTRA_CHARSETS:STRING=all                       
      -DWITH_SSL:STRING=bundled                              
      -DWITH_UNIT_TESTS:BOOL=OFF                             
      -DWITH_ZLIB:STRING=bundled                             
      -DWITH_PARTITION_STORAGE_ENGINE:BOOL=ON                
      -DWITH_INNOBASE_STORAGE_ENGINE:BOOL=ON                 
      -DWITH_ARCHIVE_STORAGE_ENGINE:BOOL=ON                  
      -DWITH_BLACKHOLE_STORAGE_ENGINE:BOOL=ON                
      -DWITH_PERFSCHEMA_STORAGE_ENGINE:BOOL=ON               
      -DDEFAULT_CHARSET=utf8                                 
      -DDEFAULT_COLLATION=utf8_general_ci                    
      -DWITH_EXTRA_CHARSETS=all                              
      -DENABLED_LOCAL_INFILE:BOOL=ON                         
      -DWITH_EMBEDDED_SERVER=0                               
      -DINSTALL_LAYOUT:STRING=STANDALONE                     
      -DCOMMUNITY_BUILD:BOOL=ON                              
      -DMYSQL_SERVER_SUFFIX='-r5436';
    
    make -j `cat /proc/cpuinfo | grep processor| wc -l`
    
    %install
    cd $OLDPWD/../
    make DESTDIR=$RPM_BUILD_ROOT install
    
    %clean
    rm -rf $RPM_BUILD_ROOT
    
    %files
    %defattr(-, %{MYSQL_USER}, %{MYSQL_GROUP})
    %attr(755, %{MYSQL_USER}, %{MYSQL_GROUP}) %{prefix}/*
    
    %pre
    
    %post
    ln -s %{prefix}/lib %{prefix}/lib64
    
    %preun
    
    %changelog
    
    有了这个spec文件之后,就能够运行例如以下命令生成我们自己的RPM包:
    rpmbuild -bb ./mysql.spec

    2、编写my.cnf模板

    my.cnf模板例如以下:
    [mysqld_safe]
    pid-file=/opt/mysql/run/mysqld.pid
    
    [mysql]
    prompt=\u@\d \r:\m:\s>
    default-character-set=gbk
    no-auto-rehash
    
    [client]
    socket=/opt/mysql/run/mysql.sock
    
    [mysqld]
    #dir
    basedir=/opt/mysql
    datadir=/data/mysql/data
    tmpdir=/data/mysql/tmp
    log-error=/data/mysql/log/alert.log
    slow_query_log_file=/data/mysql/log/slow.log
    general_log_file=/data/mysql/log/general.log
    socket=/opt/mysql/run/mysql.sock
    
    #innodb
    innodb_data_home_dir=/data/mysql/data
    innodb_log_group_home_dir=/data/mysql/data
    innodb_data_file_path=ibdata1:2G;ibdata2:16M:autoextend
    innodb_buffer_pool_size=10G
    innodb_buffer_pool_instances=4
    innodb_log_files_in_group=4
    innodb_log_file_size=1G
    innodb_log_buffer_size=200M
    innodb_flush_log_at_trx_commit=1
    innodb_additional_mem_pool_size=20M
    innodb_max_dirty_pages_pct=60
    innodb_io_capacity=200
    innodb_thread_concurrency=32
    innodb_read_io_threads=8
    innodb_write_io_threads=8
    innodb_open_files=60000
    innodb_file_format=Barracuda
    innodb_file_per_table=1
    innodb_flush_method=O_DIRECT
    innodb_change_buffering=all
    innodb_adaptive_flushing=1
    innodb_old_blocks_time=1000
    innodb_stats_on_metadata=0
    innodb_read_ahead=0
    innodb_use_native_aio=0
    innodb_lock_wait_timeout=50
    innodb_rollback_on_timeout=0
    innodb_purge_threads=1
    innodb_strict_mode=1
    transaction-isolation=READ-COMMITTED
    
    #myisam
    key_buffer_size=100M
    myisam_sort_buffer_size=64M
    concurrent_insert=2
    delayed_insert_timeout=300
    
    #replication
    master-info-file=/data/mysql/log/master.info
    relay-log=/data/mysql/log/mysql-relay
    relay_log_info_file=/data/mysql/log/mysql-relay.info
    relay-log-index=/data/mysql/log/mysql-relay.index
    slave_load_tmpdir=/data/mysql/tmp
    slave_type_conversions="ALL_NON_LOSSY"
    slave_net_timeout=4
    skip-slave-start
    sync_master_info=1000
    sync_relay_log_info=1000
    
    #binlog
    log-bin=/data/mysql/log/mysql-bin
    server_id=2552763370
    binlog_cache_size=32K
    max_binlog_cache_size=2G
    max_binlog_size=500M
    binlog_format=ROW
    sync_binlog=1000
    log-slave-updates=1
    expire_logs_days=0
    
    #server
    default-storage-engine=INNODB
    character-set-server=gbk
    lower_case_table_names=1
    skip-external-locking
    open_files_limit=65536
    safe-user-create
    local-infile=1
    performance_schema=0
    
    log_slow_admin_statements=1
    log_warnings=1
    long_query_time=1
    slow_query_log=1
    general_log=0
    
    query_cache_type=0
    query_cache_limit=1M
    query_cache_min_res_unit=1K
    
    table_definition_cache=65536
    
    thread_stack=512K
    thread_cache_size=256
    read_rnd_buffer_size=128K
    sort_buffer_size=256K
    join_buffer_size=128K
    read_buffer_size=128K
    
    port=3306
    skip-name-resolve
    skip-ssl
    max_connections=4500
    max_user_connections=4000
    max_connect_errors=65536
    max_allowed_packet=128M
    connect_timeout=8
    net_read_timeout=30
    net_write_timeout=60
    back_log=1024
    
    #server id
    
    细心的读者应该会注意在,在my.cnf的末尾在server id上留了空白,在后面的shell脚本会动态加上,这是由于在一个企业内部的全部MySQL的server id必须保持全局一致性,这样在主备复制时才不会导致混乱。
    事实上假设想把这个脚本写的更通用,全然能够把很多其它的參数留白,如port、datadir、内存相关參数等,这里我仅仅是以server id为例,抛砖引玉。

    3、准备MySQL数据文件夹模板

    你得事先准备一台MySQL,能够依据自己的需求,把通用性的东西放在上面(如账户等),以下是一个最简单的已安装好的MySQL的数据文件夹结构:
    [root@lx25 mysql]# ls -l
    total 12
    drwxr-xr-x 5 mysql mysql 4096 Jul  2 09:26 data
    drwxr-xr-x 2 mysql mysql 4096 Jul  1 18:21 log
    drwxr-xr-x 2 mysql mysql 4096 Jul  2 09:26 tmp
    [root@lx25 mysql]# cd data
    [root@lx25 data]# ls -l
    total 6314044
    drwx------ 2 mysql mysql       4096 Jul  1 17:17 mysql
    drwx------ 2 mysql mysql       4096 Jul  1 17:17 performance_schema
    drwx------ 2 mysql mysql       4096 Jul  1 17:17 test
    
    把该文件夹用tar打包(命名为data.tar),然后以这个为模板解压至新装MySQL实例的数据文件夹下就可以。

    4、编写自己主动化安装部署脚本

    在执行这个脚本之前,我们必须得把前面几部制作的rpm包、my.cnf模板和数据文件夹模板放到一个固定的地方,本例中是放在企业内部的ftp上。
    MySQL自己主动化安装部署脚本(命名为:mysql_install.sh)例如以下:
    #!/bin/sh
    
    #Step 1: Prepare
    yum install cmake gcc g++ bison ncurses-devel zlib 
    
    groupadd mysql
    useradd -g mysql mysql
    
    #Step 2: Get Source
    ftp -n<<EOF
    open 10.10.100.254
    user zhuxianjie zxj321
    binary
    cd mysql
    prompt
    mget *
    EOF
    
    #Step 3: Install
    unique_id=`date "+%Y%m%d%M%S"`
    echo 'server_id='$unique_id >> my.cnf
    rpm -ivh mysql-5.6.16-guahao.x86_64.rpm
    cp my.cnf /opt/mysql
    chown -R mysql:mysql /opt/mysql
    
    tar xvf data.tar -C /data
    chown -R mysql:mysql /data/mysql
    
    #step 4: Start MySQL
    cp /opt/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
    chmod 755 /etc/init.d/mysqld
    chkconfig mysqld on
    
    /etc/init.d/mysqld start


  • 相关阅读:
    leetcode 29-> Divide Two Integers without using multiplication, division and mod operator
    ros topic 发布一次可能会接收不到数据
    python中的print()、str()和repr()的区别
    python 部分函数
    uiautomatorviewer错误 unable toconnect to adb
    pyqt 不规则形状窗口显示
    appium 计算器demo
    Spring 3.0 注解注入详解
    Spring Autowire自动装配
    restful 学习地址
  • 原文地址:https://www.cnblogs.com/yxwkf/p/3849068.html
Copyright © 2011-2022 走看看