MySQL如何自动化安装部署
发布时间:2021-12-24 12:49:10 所属栏目:MySql教程 来源:互联网
导读:这篇文章给大家分享的是有关MySQL如何自动化安装部署的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 1、制作符合自己需求的RPM包 我们要根据MySQL的源码编译符合企业需求的RPM包,源码获取命令如下: wget http://downloads.my
这篇文章给大家分享的是有关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 附件1:(MySQL编译参数) CMAKE_BUILD_TYPE 编译的版本类型:RelWithDebInfo和Debug,不同之处是RelWithDebInfo会进行优化。 CMAKE_INSTALL_PREFIX 指定make install安装的目标路径。 SYSCONFDIR 指定配置文件的默认路径。 MYSQL_DATADIR 指定data目录的默认路径。 WITH_DEBUG 指定是否有debugging信息,一般用于源码调试时,打开WITH_DEBUG,生产环境关闭。 ENABLED_PROFILING 指定是否可以使用show profile显示操作执行的详细信息。 DEFAULT_CHARSET 指定默认字符集,可以在启动的配置文件中指定。 DEFAULT_COLLATION 指定默认字符比较、排序的规则。 WITH_EXTRA_CHARSETS 指定其他可能使用的字符集。 WITH_SSL 指定SSL的类型,从5.6.6开始默认bundled类型,此外也可以指定SSL库的路径地址。 WITH_ZLIB 指定zlib的类型,用于压缩功能。 WITH_storage_STORAGE_ENGINE 指定编译支持的存储引擎,默认支持MyISAM,MERGE,MEMORY,CSV存储引擎。 ENABLED_LOCAL_INFILE 指定是否允许使用load data infile功能。 WITH_EMBEDDED_SERVER 指定是否编译libmysqld嵌入式库。 INSTALL_LAYOUT 指定安装的布局类型。 感谢各位的阅读!关于“MySQL如何自动化安装部署”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧! (编辑:91站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |