Michael van Elst 23 лет назад
Родитель
Сommit
8f261ecf34
3 измененных файлов с 154 добавлено и 19 удалено
  1. 63 2
      mysql/my.cnf
  2. 48 6
      mysql/mysql.spec
  3. 43 11
      mysql/rc.mysql

+ 63 - 2
mysql/my.cnf

@@ -1,10 +1,71 @@
 
-[mysqld]
+[safe_mysqld]
 datadir      = @l_prefix@/var/mysql/db
 socket       = @l_prefix@/var/mysql/mysqld.sock
 set-variable = pid_file=@l_prefix@/var/mysql/mysqld.pid
 set-variable = max_connections=1000
 port         = 3306
-user         = @l_musr@
+user         = @l_rusr@
 basedir      = @l_prefix@
 
+# Logfile destinations - you must update rc.mysql accordingly
+log          = @l_prefix@/var/mysql/common.log
+log-update   = @l_prefix@/var/mysql/update.log
+
+# these are the most important tuning parameters for mysqld
+set-variable = key_buffer_size=16M
+set-variable = table_cache=64
+
+# change these parameters if special problems occur
+set-variable = join_buffer_size=1M
+set-variable = max_connections=1000
+set-variable = max_connect_errors=10
+set-variable = max_delayed_threads=20
+set-variable = max_heap_table_size=16777216
+set-variable = max_sort_length=1024
+set-variable = max_user_connections=0
+set-variable = record_buffer=131072
+set-variable = record_rnd_buffer=131072
+set-variable = sort_buffer=2M
+set-variable = key_buffer=1M
+set-variable = tmp_table_size=32M
+
+#
+# BERKELEY DB
+#
+
+# memory parameters - set these to values <> 0 if bdb
+# tables are used
+set-variable = bdb_cache_size=@mysql_bdb_cache_size@
+set-variable = bdb_log_buffer_size=@mysql_bdb_log_buffer_size@
+set-variable = bdb_max_lock=@mysql_bdb_max_lock@
+
+#
+# INNOBASE
+#
+
+# The common part of the directory path for all InnoDB datafiles.
+# default is the mysql data directory
+#innodb_data_home_dir =
+
+# Tablespaces
+# specify a list of pathtodatafile:sizespecification separated
+# by semicolon. The last datafile can have options
+# -   :autoextend              increment datafile in 8M chunks
+# -   :max:sizespecification   max size of the datafile
+#innodb_data_file_path=@innodb_data_file_path@
+
+# Tunings
+# Set buffer pool size to 50 -80 % of your computer's memory
+# Set the log file size to about 25 % of the buffer pool size
+# Set ..flush_log_at_trx_commit to 0 if you can afford losing
+#  some last transactions
+# Set innodb_lock_wait_timeout to bail out of external deadlocks
+#set-variable = innodb_buffer_pool_size=70M
+#set-variable = innodb_additional_mem_pool_size=2M
+#set-variable = innodb_log_files_in_group=3
+#set-variable = innodb_log_file_size=20M
+#set-variable = innodb_log_buffer_size=8M
+#innodb_flush_log_at_trx_commit=1
+#set-variable = innodb_lock_wait_timeout=50
+

+ 48 - 6
mysql/mysql.spec

@@ -36,6 +36,22 @@
 %define       with_gemini      no
 %endif
 
+%if %{with_berkeleydb} == "yes"
+%define       mysql_bdb_cache_size        8M
+%define       mysql_bdb_log_buffer_size   32k
+%define       mysql_bdb_max_lock          10000
+%else
+%define       mysql_bdb_cache_size        0
+%define       mysql_bdb_log_buffer_size   0
+%define       mysql_bdb_max_lock          0
+%endif
+
+%if %{with_berkeleydb} == "yes" || %{with_innobase} == "yes" || %{with_gemini} == "yes"
+%define       mysqld     mysqld
+%else
+%define       mysqld     mysqld-max
+%endif
+
 #   package information
 Name:         mysql
 Summary:      Fast Relational Database Management System
@@ -46,13 +62,14 @@ Distribution: OpenPKG [BASE]
 Group:        Database
 License:      GPL
 Version:      3.23.53
-Release:      20021014
+Release:      20021204
 
 #   list of sources
 Source0:      http://sunsite.informatik.rwth-aachen.de/mysql/Downloads/MySQL-3.23/mysql-%{version}.tar.gz
 Source1:      my.cnf
 Source2:      rc.mysql
 Patch0:       mysql.patch
+Patch1:       mysql-initdb.patch
 
 #   build information
 Prefix:       %{l_prefix}
@@ -78,6 +95,7 @@ AutoReqProv:  no
 %prep
     %setup -q
     %patch0 -p1
+    %patch1 -p1
 
 %build
     #   determine additional configure options
@@ -118,6 +136,11 @@ AutoReqProv:  no
 %install
     rm -rf $RPM_BUILD_ROOT
 
+    #   patch init script
+    %{l_shtool} subst \
+        -e 's;@l_prefix@;%{l_prefix};g' \
+        $RPM_BUILD_ROOT%{l_prefix}/scripts/mysql_install_db.sh
+
     #   perform standard installation procedure
     %{l_make} %{l_mflags} install \
         AM_MAKEFLAGS="DESTDIR=$RPM_BUILD_ROOT" \
@@ -140,13 +163,23 @@ AutoReqProv:  no
     %{l_shtool} mkdir -f -p -m 755 $RPM_BUILD_ROOT%{l_prefix}/etc/mysql
     %{l_shtool} install -c -m 644 \
         -e 's;@l_prefix@;%{l_prefix};g' \
-        -e 's;@l_musr@;%{l_musr};g' \
+        -e 's;@l_rusr@;%{l_rusr};g' \
+        -e 's;@mysql_bdb_cache_size@;%{mysql_bdb_cache_size};g' \
+        -e 's;@mysql_bdb_log_buffer_size@;%{mysql_bdb_log_buffer_size};g' \
+        -e 's;@mysql_bdb_max_lock@;%{mysql_bdb_max_lock};g' \
         %{SOURCE my.cnf} \
         $RPM_BUILD_ROOT%{l_prefix}/etc/mysql/
+    %{l_shtool} install -c -m 600 \
+        %{SOURCE my.pwd} \
+        $RPM_BUILD_ROOT%{l_prefix}/etc/mysql/
 
     #   install run-command script
     %{l_shtool} mkdir -f -p -m 755 $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d
-    %{l_shtool} install -c -m 755 -e 's;@l_prefix@;%{l_prefix};g' \
+    %{l_shtool} install -c -m 755 \
+        -e 's;@l_prefix@;%{l_prefix};g' \
+        -e 's;@l_rusr@;%{l_rusr};g' \
+        -e 's;@l_rgrp@;%{l_rgrp};g' \
+        -e 's;@mysqld@;%{mysqld};g' \
         %{SOURCE rc.mysql} $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d/
 
     #   make sure the database directory exists
@@ -155,7 +188,8 @@ AutoReqProv:  no
     #   determine the package files
     %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT \
         %{l_files_std} \
-        '%config %{l_prefix}/etc/mysql/my.cnf'
+        '%config %{l_prefix}/etc/mysql/my.cnf' \
+        '%config %{l_prefix}/etc/mysql/my.pwd'
 
 %files -f files
 
@@ -164,5 +198,13 @@ AutoReqProv:  no
 
 %post
     $RPM_INSTALL_PREFIX/bin/mysql_install_db
-    chown -R %{l_musr}:%{l_mgrp} $RPM_INSTALL_PREFIX/var/mysql/
-
+    chown %{l_rusr}:%{l_rgrp} \
+        $RPM_INSTALL_PREFIX/etc/mysql/my.cnf \
+        $RPM_INSTALL_PREFIX/etc/mysql/my.pwd
+    chown -R %{l_rusr}:%{l_rgrp} $RPM_INSTALL_PREFIX/var/mysql/
+    #   display information about next steps
+    ( echo "The MySQL package includes automated maintenance procedures"
+      echo "that require administrator access to the database. For this"
+      echo "to work you must keep a copy (plain text) of the administrator"
+      echo "account in '$RPM_INSTALL_PREFIX/etc/mysql/my.pwd'."
+    ) | %{l_rpmtool} msg -b -t notice

+ 43 - 11
mysql/rc.mysql

@@ -5,21 +5,53 @@
 
 %config
     mysql_enable="yes"
+    mysql_pwd_file=@l_prefix@/etc/mysql/my.pwd
+    mysql_log_prolog="true"
+    mysql_log_epilog="true"
+    mysql_log_numfiles="10"
+    mysql_log_minsize="1M"
+    mysql_log_complevel="9"
+    #
+    # same files as in my.cnf
+    mysql_pid_file=@l_prefix@/var/mysql/mysqld.pid
+    mysql_log_err=@l_prefix@/var/mysql/mysqld.err
+    mysql_log_common=@l_prefix@/var/mysql/common.log
+    mysql_log_update=@l_prefix@/var/mysql/update.log
 
-%start -p 200 -u root
+%start -p 200 -u @l_rusr@
     opServiceEnabled mysql || exit 0
-    @l_prefix@/bin/safe_mysqld >/dev/null 2>&1 &
+    cd @l_prefix@
+    @l_prefix@/bin/safe_mysqld >/dev/null 2>&1 \
+        --mysqld=@mysqld@ \
+        --pid-file="$mysql_pid_file" \
+        --err-log="$mysql_log_err" &
 
-%stop -p 200 -u root
+%stop -p 200 -u @l_rusr@
     opServiceEnabled mysql || exit 0
-    #   standard (but would require admin password!)
-    #@l_prefix@/bin/mysqladmin shutdown
-    #   alternative (does not require admin password)
-    kill -TERM `cat @l_prefix@/var/mysql/\`hostname\`.pid`
+    @l_prefix@/bin/mysqladmin \
+        --defaults-extra-file=${mysql_pwd_file} \
+        shutdown
 
-%restart -u root
+%restart -u @l_rusr@
     opServiceEnabled mysql || exit 0
-    kill -TERM `cat @l_prefix@/var/mysql/\`hostname\`.pid`
-    sleep 2
-    @l_prefix@/bin/safe_mysqld >/dev/null 2>&1 &
+    cd @l_prefix@
+    @l_prefix@/bin/mysqladmin \
+        --defaults-extra-file=${mysql_pwd_file} \
+        shutdown
+    @l_prefix@/bin/safe_mysqld >/dev/null 2>&1 \
+        --mysqld=@mysqld@ \
+        --pid-file="$mysql_pid_file" \
+        --err-log="$mysql_log_err" &
 
+%daily -u @l_rusr@
+    opServiceEnabled mysql || exit 0
+    shtool rotate -f \
+        -n${mysql_log_numfiles} -s${mysql_log_minsize} -d \
+        -z${mysql_log_complevel} -o@l_rusr@ -g@l_rgrp@ -m644 \
+        -P "${mysql_log_prolog}" \
+        -E "@l_prefix@/bin/mysqladmin \
+            --defaults-extra-file=${mysql_pwd_file} \
+            flush-logs ; ${mysql_log_epilog}" \
+        ${mysql_log_common} \
+        ${mysql_log_update} \
+        ${mysql_log_err}