• [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


  • 相关阅读:
    Android学习笔记_10_ContentProvider内容提供者的使用
    Android学习笔记_9_SQLiteOpenHelper对象之数据库增删改查以及事务回滚操作
    Android学习笔记_8_使用SharedPreferences存储数据
    Android学习笔记_7_使用 sax 或者 dom 或者 pull 解析XML文件
    Android学习笔记_6_保存文件到SDCard
    java GZIP 压缩数据
    struts2 实现文件下载方法汇总
    javascript ActiveXObject FileSystemObject 对象,创建、复制、删除、读取文件等
    css块元素的 display 属性 inline-block 的应用
    javascript操作Date对象
  • 原文地址:https://www.cnblogs.com/yxwkf/p/3849068.html
Copyright © 2020-2023  润新知