首先需要搭建ftpserver
yum install vsftpd service vsftpd start
这样ftp服务就起来了,这里只是简单的使用,所以没有使用配置文件。这样我们只要将需要的文件置于/var/ftp/pub/文件夹下,匿名用户就可以copy文件到本机了。
安装rpm-build
build需要用到rpm-build,这里简单安装即可
yum install rpm-build
下面开始rpm打包
mget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.21.tar.gz cd /u01/mysql-5.6.21 mkdir rpm cd rpm
修改mysql.spec
Name: mysql-rpm Version:5.6.21 Release: renfengjun License: GPL URL: http://dev.mysql.com/ Group: applications/database BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root BuildRequires: cmake Packager: dexter.ren.jl@gmail.com Autoreq: no prefix: /u01/mysql Summary: mysql-5.6.21.tar.gz %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-loadproduction 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 mkdir -p /u01/mysql/data mkdir -p /u01/mysql/run mkdir -p /u01/mysql/log groupadd mysql useradd -g mysql mysql chown -R mysql:mysql /u01/mysql/data chown -R mysql:mysql /u01/mysql/log chown -R mysql:mysql /u01/mysql/run echo "exportPATH=$PATH:/u01/mysql/bin" >> /home/mysql/.bash_profile %post ln -s %{prefix}/lib %{prefix}/lib64 cp /u01/mysql/support-files/mysql.server/etc/init.d/mysql chkconfig mysql on %preun chkconfig --del mysql rm -rf /u01 userdel mysql rm -rf /var/spool/mail/mysql rm -rf /etc/init.d/mysql rm -rf /home/mysql %changelog
执行打包命令
rpmbuild -bb ./mysql.spec
输出:
Requires(pre): /bin/sh Requires(post): /bin/sh Requires(preun): /bin/sh Checking for unpackaged file(s):/usr/lib/rpm/check-files /var/tmp/mysql-rpm-5.6.21-renfengjun-root warning: Could not canonicalize hostname:centos511 Wrote:/usr/src/redhat/RPMS/x86_64/mysql-rpm-5.6.21-renfengjun.x86_64.rpm Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.62530 + umask 022 + cd /usr/src/redhat/BUILD + rm -rf/var/tmp/mysql-rpm-5.6.21-renfengjun-root + exit 0
生成的rpm包在这里:
/usr/src/redhat/RPMS/x86_64/mysql-rpm-5.6.21-renfengjun.x86_64.rpm
打包数据模板
打包的时候记得关闭mysql。这里写了一点测试数据:
mysql> select * from dexdb.t ; +------+------------+ | id |name | +------+------------+ | 1 |renfengjun | +------+------------+ 1 row in set (0.00 sec)
数据模板打包,记得ibdata1打包上
cd /u01/mysql/data
tar cf data.tar ibdata1 mysql/ dexdb/performance_schema/ test/
修改my.cnf
my.cnf文件内容:
[mysqld_safe] pid-file=/u01/mysql/run/mysqld.pid #malloc-lib=/u01/mysql/lib/libjemalloc.so [mysql] port=3306 prompt=\u@\d \r:\m:\s> default-character-set=gbk no-auto-rehash [client] port=3306 socket=/u01/mysql/run/mysql.sock [mysqld] #dir basedir=/u01/mysql datadir=/u01/mysql/data tmpdir=/tmp lc_messages_dir=/u01/mysql/share log-error=/u01/mysql/log/alert.log slow_query_log_file=/u01/mysql/log/slow.log general_log_file=/u01/mysql/log/general.log socket=/u01/mysql/run/mysql.sock #innodb innodb_data_home_dir=/u01/mysql/data innodb_log_group_home_dir=/u01/mysql/data innodb_data_file_path=ibdata1:12M innodb_buffer_pool_size=10G innodb_buffer_pool_instances=4 innodb_log_files_in_group=2 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=1000 innodb_thread_concurrency=16 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=inserts 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=5 innodb_rollback_on_timeout=0 innodb_purge_threads=1 innodb_strict_mode=1 transaction-isolation=READ-COMMITTED #myisam key_buffer=64M myisam_sort_buffer_size=64M concurrent_insert=2 delayed_insert_timeout=300 #replication master-info-file=/u01/mysql/log/master.info relay-log=/u01/mysql/log/relaylog relay_log_info_file=/u01/mysql/log/relay-log.info relay-log-index=/u01/mysql/log/mysqld-relay-bin.index slave_load_tmpdir=/u01/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=/u01/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 #sqlmod="STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE" 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 #table_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
serverid在自动化安装脚本中自动生成。
将上面的data.tar 、my.cnf、生成的rpm包copy到ftp的pub目录下
/var/ftp/pub/
自动化安装脚本
auto_install_mysql.sh:
#!/bin/sh yum install -y cmake gcc g++ bisonncurses-devel zlib ftp -n<<EOF open 192.168.0.33 user anonymous dexter binary cd pub prompt mget * EOF rpm -ivh mysql-rpm-5.6.21-renfengjun.x86_64.rpm tar -xvf data.tar -C /u01/mysql/data/ chown -R mysql:mysql /u01/mysql/ unique_id=`date "+%Y%m%d%M%S"` echo 'server_id='$unique_id >> my.cnf cp my.cnf /u01/mysql/
执行远程自动安装命令
执行远程拷贝(dcli命令是我从一体机里面拿出来的脚本,py编写,其实和scp差不多,有需要的可以发邮箱)
如果批量的安装,需要先使用-k选项初始化一下ssh。
将脚本copy到远程
[root@centos511 ~]# ./dcli -l root -c192.168.0.36 -f ./auto_install_mysql.sh
执行远程命令,也可以放在后台
[root@centos511 ~]#./dcli -l root -c192.168.0.36 /root/ auto_install_mysql.sh
输出:
[[root@centos511 ~]# ./dcli -l root -c192.168.0.36 /root/get_rpm.sh root@192.168.0.36's password: 192.168.0.36: Address 192.168.0.36 maps tolocalhost, but this does not map back to the address - POSSIBLE BREAK-INATTEMPT! 192.168.0.36: Loaded plugins: fastestmirror,security 192.168.0.36: Loading mirror speeds from cachedhostfile 192.168.0.36: * base: mirrors.btte.net 192.168.0.36: * extras: mirrors.btte.net 192.168.0.36: * updates: mirrors.yun-idc.com 192.168.0.36: Setting up Install Process 192.168.0.36: Packagecmake-2.6.4-5.el5.4.x86_64 already installed and latest version 192.168.0.36: Package gcc-4.1.2-55.el5.x86_64already installed and latest version 192.168.0.36: No package g++ available. 192.168.0.36: Package bison-2.3-2.1.x86_64already installed and latest version 192.168.0.36: Packagencurses-devel-5.5-24.20060715.x86_64 already installed and latest version 192.168.0.36: Packagencurses-devel-5.5-24.20060715.i386 already installed and latest version 192.168.0.36: Package zlib-1.2.3-7.el5.x86_64already installed and latest version 192.168.0.36: Package zlib-1.2.3-7.el5.i386already installed and latest version 192.168.0.36: Nothing to do 192.168.0.36: Please login with USER and PASS. 192.168.0.36: Please login with USER and PASS. 192.168.0.36: KERBEROS_V4 rejected as anauthentication type 192.168.0.36: Interactive mode off. 192.168.0.36: Preparing... ################################################## 192.168.0.36: mysql-rpm ################################################## .......
结束。
验证一下
[root@study2 ~]# service mysql start Starting MySQL.......................[ OK ] [root@study2 ~]# su - mysql mys[mysql@study2 ~]$ mysql Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 1 Server version: 5.6.21-r5436-log Sourcedistribution Copyright (c) 2000, 2014, Oracle and/or itsaffiliates. All rights reserved. Oracle is a registered trademark of OracleCorporation and/or its affiliates. Other names may be trademarks oftheir respective owners. Type 'help;' or 'h' for help. Type 'c' toclear the current input statement. root@(none) 12:29:11>show databases ; +--------------------+ | Database | +--------------------+ | information_schema | | dexdb | | mysql | | performance_schema | | test | +--------------------+ 5 rows in set (0.37 sec) root@(none) 12:29:14>use dexdb ; Database changed root@dexdb 12:29:17>select * from t ; +------+------------+ | id |name | +------+------------+ | 1 |renfengjun | +------+------------+ 1 row in set (0.19 sec) root@dexdb 12:29:19>quit Bye [root@study2 ~]# service mysql stop Shutting down MySQL.[ OK ]
比较粗糙,还有需要改进的地方。慢慢完善吧。