-★出爺;3 发表于 2018-10-21 08:37:20

使用fpm制作mysql-server的rpm包

1    安装前
  请安装好fpm,我的博客中有相关教程,不知道为什么word复制到博客会出现有些空格被省略
2    安装mysql
  wget http://distfiles.macports.org/cmake/cmake-2.8.12.tar.gz
  tar xf cmake-2.8.12.tar.gz
  cd cmake-2.8.12
  ./configure
  gmake
  gmake install
  cd ..
  wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.16.tar.gz
  tar xf mysql-5.5.16.tar.gz
  yum install ncurses-devel libaio-devel -y
  cd mysql-5.5.16
  cmake .-DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.16 \
  -DMYSQL_DATADIR=/application/mysql-5.5.16/data\
  -DMYSQL_UNIX_ADDR=/application/mysql-5.5.16/tmp/mysql.sock\
  -DDEFAULT_CHARSET=utf8\
  -DDEFAULT_COLLATION=utf8_general_ci\
  -DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii\
  -DENABLED_LOCAL_INFILE=ON\
  -DWITH_INNOBASE_STORAGE_ENGINE=1\
  -DWITH_FEDERATED_STORAGE_ENGINE=1\
  -DWITH_BLACKHOLE_STORAGE_ENGINE=1\
  -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1\
  -DWITHOUT_PARTITION_STORAGE_ENGINE=1\
  -DWITH_FAST_MUTEXES=1\
  -DWITH_ZLIB=bundled\
  -DENABLED_LOCAL_INFILE=1\
  -DWITH_READLINE=1\
  -DWITH_EMBEDDED_SERVER=1\
  -DWITH_DEBUG=0
  make
  使用 DESTDIR= 选项将 mysql安装到指定的目录 /root/fpm-root:
  mkdir /root/fpm-root –p
  make install DESTDIR=/root/fpm-root
3      配置mysql
3.1配置文件优化
  mkdir /root/fpm-root/application/mysql-5.5.16/default/-p
  cp /root/mysql-5.5.16/support-files/my-innodb-heavy-4G.cnf /root/fpm-root/application/mysql-5.5.16/default/my.cnf.default
  vim/root/fpm-root/application/mysql-5.5.16/default/my.cnf
  
  port            = 3306
  socket          = /mnt/mysql_3306/mysql.sock
  
  no-auto-rehash
  
  user    = mysql
  port    = 3306
  socket= /mnt/mysql_3306/mysql.sock
  basedir =/application/mysql
  datadir =/mnt/mysql_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
  #default_table_type= InnoDB
  thread_stack =192K
  #transaction_isolation= READ-COMMITTED
  tmp_table_size= 2M
  max_heap_table_size= 2M
  long_query_time= 1
  #log_long_format
  #log-error =/mnt/mysql_3306/error.log
  #log-slow-queries= /mnt/mysql_3306/slow.log
  pid-file =/mnt/mysql_3306/mysql.pid
  log-bin =/mnt/mysql_3306/mysql-bin
  relay-log =/mnt/mysql_3306/relay-bin
  relay-log-info-file= /mnt/mysql_3306/relay-log.info
  binlog_cache_size= 1M
  max_binlog_cache_size= 1M
  max_binlog_size= 2M
  expire_logs_days= 7
  key_buffer_size= 16M
  read_buffer_size= 1M
  read_rnd_buffer_size= 1M
  bulk_insert_buffer_size= 1M
  #myisam_sort_buffer_size= 1M
  #myisam_max_sort_file_size= 10G
  #myisam_max_extra_sort_file_size= 10G
  #myisam_repair_threads= 1
  #myisam_recover
  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
  
  quick
  max_allowed_packet= 2M
  
  log-error=/mnt/mysql_3306/mysql_3306.err
  pid-file=/mnt/mysql_3306/mysqld.pid
3.2启动文件优化
  cp /root/mysql-5.5.16/support-files/mysql.server/root/fpm-root/application/mysql-5.5.16/support-files/mysql.server.default
  vim /root/fpm-root/application/mysql-5.5.16/support-files/mysql
  #!/bin/sh
  ################################################
  #this scripts is created by chenshifei at2016-10-07
  #chenshifei QQ:252509628
  #blog:http://chenshifei.blog.51cto.com
  ################################################
  #init
  port=3306
  mysql_user="root"
  mysql_pwd="chenshifei"
  CmdPath="/application/mysql/bin"
  mysql_sock="/mnt/mysql_${port}/mysql.sock"
  #startup function
  function_start_mysql()
  {
  if [ !-e "$mysql_sock" ];then
  printf "Starting MySQL...\n"
  /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/mnt/mysql_${port}/my.cnf 2>&1 > /dev/null &
  else
  printf "MySQL is running...\n"
  exit
  fi
  }
  #stop function
  function_stop_mysql()
  {
  if [ !-e "$mysql_sock" ];then
  printf "MySQL is stopped...\n"
  exit
  else
  printf "Stoping MySQL...\n"
  #read "input mysql_${} password: " mysql_pwd
  ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S/mnt/mysql_${port}/mysql.sock shutdown
  fi
  }
  #restart function
  function_restart_mysql()
  {
  printf "Restarting MySQL...\n"
  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: /mnt/mysql_${port}/mysql {start|stop|restart}\n"
  esac
4      编写脚本
  实现安装前、安装后、删除前、删除后的需求
  mkdir /root/fpm-scripts
  vim /root/fpm-scripts/before-install.sh
  /usr/bin/id mysql &>/dev/null
  if [ $? -ne 0 ] ; then
  /usr/sbin/useradd -M -s /sbin/nologin mysql
  fi
  vim /root/fpm-scripts/after-install.sh
  /bin/ln -s /application/mysql-5.5.16//application/mysql
  echo 'exportPATH=/application/mysql/bin:$PATH'>>/etc/profile
  . /etc/profile
  export PATH=/application/mysql/bin:$PATH
  /bin/mkdir /mnt/mysql_3306/data/ -p
  /bin/cp/application/mysql-5.5.16/support-files/mysql /mnt/mysql_3306/mysql
  /bin/cp/application/mysql-5.5.16/default/my.cnf   /mnt/mysql_3306/
  /bin/find /mnt/mysql_3306/ -type f -name"mysql"|xargs /bin/chmod 700
  /bin/chown -R mysql.mysql /mnt/mysql_3306/
  /application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/mnt/mysql_3306/data/ --user=mysql
  /bin/chown -R mysql.mysql /mnt/mysql_3306/data
  vim /root/fpm-scripts/before-remove.sh
  sed -ir '/export PATH=\/application\/mysql\/bin:\$PATH/d' /etc/profile
  PID=($(ps -ef |grep mysql|awk '{print $2}'))
  if [! -z$PID] ; then
  for iin $PID
  do
  kill $i &>/dev/null
  done
  fi
  vim /root/fpm-scripts/after-remove.sh
  /bin/rm -f /application/mysql
  /bin/rm -rf /application/mysql-5.5.16
5      生成rpm包
  创建存放包的目录/root/fpm-rpm
  mkdir /root/fpm-rpm
  打包:
  fpm -f -t rpm -n mysql -v 5.5.16 --iteration el6--epoch 1-s dir -C /root/fpm-root -p/root/fpm-rpm --license 'GPL' -d 'ncurses-devel' -d 'libaio-devel' --before-install/root/fpm-scripts/before-install.sh --after-install/root/fpm-scripts/after-install.sh --before-remove/root/fpm-scripts/before-remove.sh --after-remove/root/fpm-scripts/after-remove.sh --description 'MySQL Server 5.5.16' --url'http://www.mysql.com' -m 'Mr.chen'
  测试安装:
  cd /root/fpm-rpm/
  yum localinstall mysql-5.5.16-el6.x86_64.rpm–y
  不知道为什么需要手动执行,可能这个环境变量还是需要换成软连接来访问才好
  . /etc/profile
  /mnt/mysql_3306/mysql start
  mysql -S /mnt/mysql_3306/mysql.sock
6    卸载
  出现error:"mysql-5.5.16-el6" specifies multiple packages:的卸载办法:
  rpm -e --allmatchesmysql-5.5.16-el6.x86_64
7      多实例复制
  mkdir /mnt/mysql_3307/
  \cp/mnt/mysql_3306/my.cnf /mnt/mysql_3307/
  \cp/mnt/mysql_3306/mysql /mnt/mysql_3307/
  sed -i s#3306#3307#g'' /mnt/mysql_3307/my.cnf
  sed -i s#server-id = 1#server-id = 2#g'' /mnt/mysql_3307/my.cnf
  sed -i s#3306#3307#g'' /mnt/mysql_3307/mysql
  chown -R mysql.mysql /mnt/mysql_3307
  /application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/mnt/mysql_3307/data/ --user=mysql
  /bin/chown -R mysql.mysql /mnt/mysql_3307/data
  chmod -R 700 /mnt/mysql_3307/mysql
  启动
  /mnt/mysql_3307/mysql start
  连接
  mysql -S /mnt/mysql_3307/mysql.sock

页: [1]
查看完整版本: 使用fpm制作mysql-server的rpm包