Category Archives: sadmin

sadmin

MySQL проблем с много отворени таблици- Errcode: 24

Тук проблемът не е в MySQL да поясня отначало, а в това, че базата има много таблици и респективно отваря много файлове,а броя на файловете по подразбиране в MySQL които могат да се отварят не са особено много :).
"Проблемът" е следния: Когато се експортва база с повече таблици от колкото разрешени отворени файлове в my.cnf може да се получи следната грешка:

#mysqldump -uroot -p wordpress_multi > wordpress_multi.sql
mysqldump: Got error: 29: File './wordpress_multi/wp_61_terms.MYD' not found (Errcode: 24) when using LOCK TABLES

Понеже "error code: 24" нищо не ми говори затова използвам perror (За повече информация относно perror, натиснете ТУК) за да разбера какво означава това:

# perror 24
OS error code  24:  Too many open files

Става ясно, че трябва да увеличим максималния брой отворени файлове в mysql. Добавяте следния ред в конф файла на MySQL (/etc/my.cnf), секция [mysqld]:

open-files=2048

Рестартирате mysqld ( /etc/init.d/mysqld restart)

След като може да се отварят повече файлове от MySQL, проблем вече няма в това отношение.

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

perror и как той ще ни помогне да разрешаваме проблемите в MySQL

perror е конзолно приложение от пакета MySQL което има за цел да извежда грешките по зададен "номер на грешка". На всеки се е случвало в MySQL да получи грешка  и да се чуди какво означава "Got error 29 … (Errcode: 24) …". Повечето хора веднага започват да търся в google какво означава това, но благодарение на perror това не е необходимо. От терминала си просто изпълнете perror с аргумент номера на грешката и ще получите отговор какъв е проблема в MySQL(не в MySQL, а какво не е конфигурирано правилно в MySQL).
Пример за за използване на perror за търсене на грешка с номер 28 :

# perror 28
OS error code  28:  No space left on device

От отговора на perror става ясно къде е проблема. решението ставям на вас 😉

За мое и ваше улеснение ще предоставя номерата на грешките и техните описания според perror:

OS error code   1:  Operation not permitted
OS error code   2:  No such file or directory
OS error code   3:  No such process
OS error code   4:  Interrupted system call
OS error code   5:  Input/output error
OS error code   6:  No such device or address
OS error code   7:  Argument list too long
OS error code   8:  Exec format error
OS error code   9:  Bad file descriptor
OS error code  10:  No child processes
OS error code  11:  Resource temporarily unavailable
OS error code  12:  Cannot allocate memory
OS error code  13:  Permission denied
OS error code  14:  Bad address
OS error code  15:  Block device required
OS error code  16:  Device or resource busy
OS error code  17:  File exists
OS error code  18:  Invalid cross-device link
OS error code  19:  No such device
OS error code  20:  Not a directory
OS error code  21:  Is a directory
OS error code  22:  Invalid argument
OS error code  23:  Too many open files in system
OS error code  24:  Too many open files
OS error code  25:  Inappropriate ioctl for device
OS error code  26:  Text file busy
OS error code  27:  File too large
OS error code  28:  No space left on device
OS error code  29:  Illegal seek
OS error code  30:  Read-only file system
OS error code  31:  Too many links
OS error code  32:  Broken pipe
OS error code  33:  Numerical argument out of domain
OS error code  34:  Numerical result out of range
OS error code  35:  Resource deadlock avoided
OS error code  36:  File name too long
OS error code  37:  No locks available
OS error code  38:  Function not implemented
OS error code  39:  Directory not empty
OS error code  40:  Too many levels of symbolic links
OS error code  42:  No message of desired type
OS error code  43:  Identifier removed
OS error code  44:  Channel number out of range
OS error code  45:  Level 2 not synchronized
OS error code  46:  Level 3 halted
OS error code  47:  Level 3 reset
OS error code  48:  Link number out of range
OS error code  49:  Protocol driver not attached
OS error code  50:  No CSI structure available
OS error code  51:  Level 2 halted
OS error code  52: Invalid exchange
OS error code  53:  Invalid request descriptor
OS error code  54:  Exchange full
OS error code  55:  No anode
OS error code  56:  Invalid request code
OS error code  57:  Invalid slot
OS error code  59:  Bad font file format
OS error code  60:  Device not a stream
OS error code  61:  No data available
OS error code  62:  Timer expired
OS error code  63:  Out of streams resources
OS error code  64:  Machine is not on the network
OS error code  65:  Package not installed
OS error code  66:  Object is remote
OS error code  67:  Link has been severed
OS error code  68:  Advertise error
OS error code  69:  Srmount error
OS error code  70:  Communication error on send
OS error code  71:  Protocol error
OS error code  72:  Multihop attempted
OS error code  73:  RFS specific error
OS error code  74:  Bad message
OS error code  75:  Value too large for defined data type
OS error code  76:  Name not unique on network
OS error code  77:  File descriptor in bad state
OS error code  78:  Remote address changed
OS error code  79:  Can not access a needed shared library
OS error code  80:  Accessing a corrupted shared library
OS error code  81:  .lib section in a.out corrupted
OS error code  82:  Attempting to link in too many shared libraries
OS error code  83:  Cannot exec a shared library directly
OS error code  84:  Invalid or incomplete multibyte or wide character
OS error code  85:  Interrupted system call should be restarted
OS error code  86:  Streams pipe error
OS error code  87:  Too many users
OS error code  88:  Socket operation on non-socket
OS error code  89:  Destination address required
OS error code  90:  Message too long
OS error code  91:  Protocol wrong type for socket
OS error code  92:  Protocol not available
OS error code  93:  Protocol not supported
OS error code  94:  Socket type not supported
OS error code  95:  Operation not supported
OS error code  96:  Protocol family not supported
OS error code  97:  Address family not supported by protocol
OS error code  98:  Address already in use
OS error code  99:  Cannot assign requested address
OS error code 100:  Network is down
OS error code 101:  Network is unreachable
OS error code 102:  Network dropped connection on reset
OS error code 103:  Software caused connection abort
OS error code 104:  Connection reset by peer
OS error code 105:  No buffer space available
OS error code 106:  Transport endpoint is already connected
OS error code 107:  Transport endpoint is not connected
OS error code 108:  Cannot send after transport endpoint shutdown
OS error code 109:  Too many references: cannot splice
OS error code 110:  Connection timed out
OS error code 111:  Connection refused
OS error code 112:  Host is down
OS error code 113:  No route to host
OS error code 114:  Operation already in progress
OS error code 115:  Operation now in progress
OS error code 116:  Stale NFS file handle
OS error code 117:  Structure needs cleaning
OS error code 118:  Not a XENIX named type file
OS error code 119:  No XENIX semaphores available
OS error code 120:  Is a named type file
OS error code 121:  Remote I/O error
OS error code 122:  Disk quota exceeded
OS error code 123:  No medium found
OS error code 124:  Wrong medium type
OS error code 125:  Operation canceled
MySQL error code 126: Index file is crashed
MySQL error code 127: Record-file is crashed
MySQL error code 128: Out of memory
MySQL error code 130: Incorrect file format
MySQL error code 131: Command not supported by database
MySQL error code 132: Old database file
MySQL error code 133: No record read before update
MySQL error code 134: Record was already deleted (or record file crashed)
MySQL error code 135: No more room in record file
MySQL error code 136: No more room in index file
MySQL error code 137: No more records (read after end of file)
MySQL error code 138: Unsupported extension used for table
MySQL error code 139: Too big row
MySQL error code 140: Wrong create options
MySQL error code 141: Duplicate unique key or constraint on write or update
MySQL error code 142: Unknown character set used
MySQL error code 143: Conflicting table definitions in sub-tables of MERGE table
MySQL error code 144: Table is crashed and last repair failed
MySQL error code 145: Table was marked as crashed and should be repaired
MySQL error code 146: Lock timed out; Retry transaction
MySQL error code 147: Lock table is full;  Restart program with a larger locktable
MySQL error code 148: Updates are not allowed under a read only transactions
MySQL error code 149: Lock deadlock; Retry transaction
MySQL error code 150: Foreign key constraint is incorrectly formed
MySQL error code 151: Cannot add a child row
MySQL error code 152: Cannot delete a parent row

Inappropriate ioctl for device
VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Сверяване на дата под GNU/Linux

Преди време един приятел имаше проблем с това и му казах да използва ntpdate, но трябвало да търси ntp сървъри и бла бла.

За целта ето решението за всички които трябва да сверят своята дата под GNU/Linux:

apt-get install ntpdate;

ntpdate 0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org

Като отговор ще получите това:
31 Oct 21:19:42 ntpdate[9326]: step time server 94.26.2.134 offset -10472.841536 sec

PS: Ако искате да сложите дата и час по ваш избор, то това става по следния метод:

date -s "2009-10-31 16:21:42"

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Конфигуриране, компилиране и инсталиране на mysql 5.1.40

За да компилирате първо трябва да изтеглите Mysql 5.1.40  от ТУК (21.1 MB)
wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.40.tar.gz/from/http://mysql.online.bg/

Разархивирате  и конфигурирате mysql 5.1.40:

./configure --prefix=/usr/local/mysql \
--enable-thread-safe-client --enable-local-infile \
--with-pic --with-fast-mutexes --disable-shared \
--with-big-tables --with-readline --with-plugins=innobase \
--with-mysqld-user=mysql --with-extra-charsets=all

Компилирате и инсталирате mysql 5.1.40:
make && make install

За по- добра сигурност на mysql 5.1.40 да се изпълнява mysql потребител:

sudo groupadd mysql
sudo useradd -g mysql mysql

Проблеми които възникнаха при конфигурирането, компилирането,  инсталирането и стартирането на mysql 5.1.40:

Проблем при конфигурирането:
/bin/rm: cannot remove `libtoolT': No such file or directory
config.status: executing default commands
Решение (проблема не е особено сериозен(за мен няма такъв проблем, но така да го кажа)- Проблемът си е проблем) по- долу:

Проблем: При изпълнение на "libtoolize --force"
Using `AC_PROG_RANLIB' is rendered obsolete by `AC_PROG_LIBTOOL'

Решение:
Редактиране на configure.in (в директорията на mysql-5.1) коментирате 230 ред (#AC_PROG_RANLIB) .
Пример на configure.in:

# Still need ranlib for readline; local static use only so no libtool.
#AC_PROG_RANLIB
# We use libtool
#AC_LIBTOOL_WIN32_DLL
AC_PROG_LIBTOOL

Проблем: При изпълнение на "libtoolize --force"
изникна грешка: "You should update your `aclocal.m4' by running aclocal."
Решение: aclocal

Проблем: При изпълнение на aclocal
/usr/share/aclocal/libmcrypt.m4:17: warning: underquoted definition of AM_PATH_LIBMCRYPT
run info '(automake)Extending aclocal'
or see http://sources.redhat.com/automake/automake.html#Extending-aclocal

Решение:
Проблемът е във файл "libmcrypt.m4" или "/usr/share/aclocal/libmcrypt.m4" , ред 17:
AC_DEFUN(AM_PATH_LIBMCRYPT,

За да поправим проблема редактираме 17-ти ред по следния начин:
AC_DEFUN([AM_PATH_LIBMCRYPT],

Проблем: При ./configure
/tmp/mysql-5.1.40/missing: line 54: automake-1.10: command not found
WARNING: `automake-1.10' is missing on your system.  You should only need it if
you modified `Makefile.am', `acinclude.m4' or `configure.in'.
You might want to install the `Automake' and `Perl' packages.
Grab them from any GNU archive site.

Решение: apt-get install automake

Проблем: При стартиране на Mysqld със: /usr/local/mysql/libexec/mysqld --user=mysql &
се получава следната грешка:
[ERROR] Can't find messagefile '/usr/share/mysql/english/errmsg.sys'
Решение: ln -s /usr/local/mysql/share/mysql/ /usr/share/mysql

alpha:~# /usr/local/mysql/bin/mysqld_safe --user=mysql
091026 18:16:16 mysqld_safe Logging to '/usr/local/mysql/var/alpha.err'.
touch: cannot touch `/usr/local/mysql/var/alpha.err': No such file or directory
chown: cannot access `/usr/local/mysql/var/alpha.err': No such file or directory
091026 18:16:16 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
/usr/local/mysql/bin/mysqld_safe: line 100: /usr/local/mysql/var/alpha.err: No such file or directory
/usr/local/mysql/bin/mysqld_safe: line 137: /usr/local/mysql/var/alpha.err: No such file or directory
091026 18:16:16 mysqld_safe mysqld from pid file /usr/local/mysql/var/alpha.pid ended
/usr/local/mysql/bin/mysqld_safe: line 100: /usr/local/mysql/var/alpha.err: No such file or directory

Решение:
mkdir /usr/local/mysql/var/;
chown mysql.mysql /usr/local/mysql/var/;

Проблем при стартиране на mysqld_safe:
091026 18:46:17 [Warning] The syntax '--log' is deprecated and will be removed in MySQL 7.0. Please use

'--general_log'/'--general_log_file' instead.
091026 18:46:17 [Warning] The syntax '--log_slow_queries' is deprecated and will be removed in MySQL 7.0. Please use

'--slow_query_log'/'--slow_query_log_file' instead.

Решение: В /etc/mysql/my.cnf заменяме "log" със "general_log" и "log-slow-queries" със "slow_query_log"

Друг проблем: 091026 18:50:05 [ERROR] /usr/local/mysql/libexec/mysqld: unknown option '--skip-bdb'

Решение: премахвате просто skip-bdb

Стартиране на mysql 5.1.40:
/usr/local/mysql/bin/mysqld_safe --user=mysql &

Спиране на mysql 5.1.40:
/usr/local/mysql//bin/mysqladmin shutdown

Примерен конфигурационен файл my.cnf
(Поставям го в /etc/mysql/my.cnf (Допада ми Debian layoute -a). Може да се добави и в /etc/my.cnf . Когато се стартира mysqld_safe той автоматично проверява на тези места за конфигурационен файл и ако го намери го зарежда).:

# The MySQL server 5.1.40. My.cnf generated by amri, Mon Oct 26 19:07:30 EET 2009

[mysqld]
port            = 3306
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock

# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 2

# Section Logging
general_log=/var/log/mysql/mysql.log
log-bin=/var/log/mysql/mysql-bin.log
slow_query_log=/var/log/mysql/mysql_slow.log
long_query_time=10

#Section Skip
skip-locking

#Server ID
server-id       = 1

# Optimized
key_buffer = 512M
key_buffer_size = 384M

wait_timeout=360

max_allowed_packet = 16M

read_buffer_size = 2M
sort_buffer_size = 2M
net_buffer_length = 8K
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M

max_connections = 600

join_buffer_size = 1M
read_buffer_size = 1M
sort_buffer_size = 2M
table_cache = 1024
table_open_cache = 512
thread_cache_size = 64

query_cache_limit = 1M
query_cache_size = 32M
query_cache_type = 1

set-variable = max_connections=1400
set-variable = max_connect_errors=150

[client]
port    = 3306
socket=/var/run/mysqld/mysqld.sock

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[myisamchk]
key_buffer_size = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

Стойностите които са в този конфигурационен файл са използвани за тестове. Не мога да ги препоръчам за стабилен mysql.

Примерен mysql.server.sh :

#!/bin/sh
# Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
# This file is public domain and comes with NO WARRANTY of any kind

# MySQL daemon start/stop script.

# Usually this is put in /etc/init.d (at least on machines SYSV R4 based
# systems) and linked to /etc/rc3.d/S99mysql and /etc/rc0.d/K01mysql.
# When this is done the mysql server will be started when the machine is
# started and shut down when the systems goes down.

# Comments to support chkconfig on RedHat Linux
# chkconfig: 2345 64 36
# description: A very fast and reliable SQL database engine.

# Comments to support LSB init script conventions
### BEGIN INIT INFO
# Provides: mysql
# Required-Start: $local_fs $network $remote_fs
# Should-Start: ypbind nscd ldap ntpd xntpd
# Required-Stop: $local_fs $network $remote_fs
# Default-Start:  2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop MySQL
# Description: MySQL is a very fast and reliable SQL database engine.
### END INIT INFO

# If you install MySQL on some other places than @prefix@, then you
# have to do one of the following things for this script to work:
#
# -- Run this script from within the MySQL installation directory
# -- Create a /etc/my.cnf file with the following information:
#   [mysqld]
#   basedir=<path-to-mysql-installation-directory>
# -- Add the above to any other configuration file (for example ~/.my.ini)
#   and copy my_print_defaults to /usr/bin
# -- Add the path to the mysql-installation-directory to the basedir variable
#   below.
#
# If you want to affect other MySQL variables, you should make your changes
# in the /etc/my.cnf, ~/.my.cnf or other MySQL configuration files.

# If you change base dir, you must also change datadir. These may get
# overwritten by settings in the MySQL configuration files.

basedir="/usr/local/mysql";
datadir="/var/lib/mysql";

# Default value, in seconds, afterwhich the script should timeout waiting
# for server start.
# Value here is overriden by value in my.cnf.
# 0 means don't wait at all
# Negative numbers mean to wait indefinitely
service_startup_timeout=900

# The following variables are only set for letting mysql.server find things.

# Set some defaults
pid_file="/var/run/mysqld/mysqld.pid";
server_pid_file="/var/run/mysqld/mysqld.pid";

use_mysqld_safe=1
user=@MYSQLD_USER@
if test -z "$basedir"
then
basedir=@prefix@
bindir=@bindir@
if test -z "$datadir"
then
datadir=@localstatedir@
fi
sbindir=@sbindir@
libexecdir=@libexecdir@
else
bindir="$basedir/bin"
if test -z "$datadir"
then
datadir="$basedir/data"
fi
sbindir="$basedir/sbin"
libexecdir="$basedir/libexec"
fi

# datadir_set is used to determine if datadir was set (and so should be
# *not* set inside of the --basedir= handler.)
datadir_set=

#
# Use LSB init script functions for printing messages, if possible
#
lsb_functions="/lib/lsb/init-functions"
if test -f $lsb_functions ; then
. $lsb_functions
else
log_success_msg()
{
echo " SUCCESS! $@"
}
log_failure_msg()
{
echo " ERROR! $@"
}
fi

PATH=/sbin:/usr/sbin:/bin:/usr/bin:$basedir/bin
export PATH

mode=$1    # start or stop
shift
other_args="$*"   # uncommon, but needed when called from an RPM upgrade action
# Expected: "--skip-networking --skip-grant-tables"
# They are not checked here, intentionally, as it is the resposibility
# of the "spec" file author to give correct arguments only.

case `echo "testing\c"`,`echo -n testing` in
*c*,-n*) echo_n=   echo_c=     ;;
*c*,*)   echo_n=-n echo_c=     ;;
*)       echo_n=   echo_c='\c' ;;
esac

parse_server_arguments() {
for arg do
case "$arg" in
--basedir=*)  basedir=`echo "$arg" | sed -e 's/^[^=]*=//'`
bindir="$basedir/bin"
if test -z "$datadir_set"; then
datadir="$basedir/data"
fi
sbindir="$basedir/sbin"
libexecdir="$basedir/libexec"
;;
--datadir=*)  datadir=`echo "$arg" | sed -e 's/^[^=]*=//'`
datadir_set=1
;;
--user=*)  user=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
--pid-file=*) server_pid_file=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
--service-startup-timeout=*) service_startup_timeout=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
--use-mysqld_safe) use_mysqld_safe=1;;
--use-manager)     use_mysqld_safe=0;;
esac
done
}

parse_manager_arguments() {
for arg do
case "$arg" in
--pid-file=*) pid_file=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
--user=*)  user=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
esac
done
}

wait_for_pid () {
verb="$1"
manager_pid="$2"  # process ID of the program operating on the pid-file
i=0
avoid_race_condition="by checking again"
while test $i -ne $service_startup_timeout ; do

case "$verb" in
'created')
# wait for a PID-file to pop into existence.
test -s $pid_file && i=" && break
;;
'removed')
# wait for this PID-file to disappear
test ! -s $pid_file && i=" && break
;;
*)
echo "wait_for_pid () usage: wait_for_pid created|removed manager_pid"
exit 1
;;
esac

# if manager isn't running, then pid-file will never be updated
if test -n "$manager_pid"; then
if kill -0 "$manager_pid" 2>/dev/null; then
:  # the manager still runs
else
# The manager may have exited between the last pid-file check and now.
if test -n "$avoid_race_condition"; then
avoid_race_condition=""
continue  # Check again.
fi

# there's nothing that will affect the file.
log_failure_msg "Manager of pid-file quit without updating file."
return 1  # not waiting any more.
fi
fi

echo $echo_n ".$echo_c"
i=`expr $i + 1`
sleep 1
done

if test -z "$i" ; then
log_success_msg
return 0
else
log_failure_msg
return 1
fi
}

# Get arguments from the my.cnf file,
# the only group, which is read from now on is [mysqld]
if test -x ./bin/my_print_defaults
then
print_defaults="./bin/my_print_defaults"
elif test -x $bindir/my_print_defaults
then
print_defaults="$bindir/my_print_defaults"
elif test -x $bindir/mysql_print_defaults
then
print_defaults="$bindir/mysql_print_defaults"
else
# Try to find basedir in /etc/my.cnf
conf=/etc/my.cnf
print_defaults=
if test -r $conf
then
subpat='^[^=]*basedir[^=]*=\(.*\)$'
dirs=`sed -e "/$subpat/!d" -e 's//\1/' $conf`
for d in $dirs
do
d=`echo $d | sed -e 's/[  ]//g'`
if test -x "$d/bin/my_print_defaults"
then
print_defaults="$d/bin/my_print_defaults"
break
fi
if test -x "$d/bin/mysql_print_defaults"
then
print_defaults="$d/bin/mysql_print_defaults"
break
fi
done
fi

# Hope it's in the PATH … but I doubt it
test -z "$print_defaults" && print_defaults="my_print_defaults"
fi

#
# Read defaults file from 'basedir'.   If there is no defaults file there
# check if it's in the old (depricated) place (datadir) and read it from there
#

extra_args=""
if test -r "$basedir/my.cnf"
then
extra_args="-e $basedir/my.cnf"
else
if test -r "$datadir/my.cnf"
then
extra_args="-e $datadir/my.cnf"
fi
fi

parse_server_arguments `$print_defaults $extra_args mysqld server mysql_server mysql.server`

# Look for the pidfile
parse_manager_arguments `$print_defaults $extra_args manager`

#
# Set pid file if not given
#
if test -z "$pid_file"
then
pid_file=$datadir/mysqlmanager-`@HOSTNAME@`.pid
else
case "$pid_file" in
/* ) ;;
* )  pid_file="$datadir/$pid_file" ;;
esac
fi
if test -z "$server_pid_file"
then
server_pid_file=$datadir/`@HOSTNAME@`.pid
else
case "$server_pid_file" in
/* ) ;;
* )  server_pid_file="$datadir/$server_pid_file" ;;
esac
fi

case "$mode" in
'start')
# Start daemon

# Safeguard (relative paths, core dumps..)
cd $basedir

manager=$bindir/mysqlmanager
if test -x $libexecdir/mysqlmanager
then
manager=$libexecdir/mysqlmanager
elif test -x $sbindir/mysqlmanager
then
manager=$sbindir/mysqlmanager
fi

echo $echo_n "Starting MySQL"
if test -x $manager -a "$use_mysqld_safe" = "0"
then
if test -n "$other_args"
then
log_failure_msg "MySQL manager does not support options '$other_args'"
exit 1
fi
# Give extra arguments to mysqld with the my.cnf file. This script may
# be overwritten at next upgrade.
"$manager" \
--mysqld-safe-compatible \
--user="$user" \
--pid-file="$pid_file" >/dev/null 2>&1 &
wait_for_pid created $!; return_value=$?

# Make lock for RedHat / SuSE
if test -w /var/lock/subsys
then
touch /var/lock/subsys/mysqlmanager
fi
exit $return_value
elif test -x $bindir/mysqld_safe
then
# Give extra arguments to mysqld with the my.cnf file. This script
# may be overwritten at next upgrade.
pid_file=$server_pid_file
$bindir/mysqld_safe --datadir=$datadir --pid-file=$server_pid_file $other_args >/dev/null 2>&1 &
wait_for_pid created $!; return_value=$?

# Make lock for RedHat / SuSE
if test -w /var/lock/subsys
then
touch /var/lock/subsys/mysql
fi
exit $return_value
else
log_failure_msg "Couldn't find MySQL manager ($manager) or server ($bindir/mysqld_safe)"
fi
;;

'stop')
# Stop daemon. We use a signal here to avoid having to know the
# root password.

# The RedHat / SuSE lock directory to remove
lock_dir=/var/lock/subsys/mysqlmanager

# If the manager pid_file doesn't exist, try the server's
if test ! -s "$pid_file"
then
pid_file=$server_pid_file
lock_dir=/var/lock/subsys/mysql
fi

if test -s "$pid_file"
then
mysqlmanager_pid=`cat $pid_file`

if (kill -0 $mysqlmanager_pid 2>/dev/null)
then
echo $echo_n "Shutting down MySQL"
kill $mysqlmanager_pid
# mysqlmanager should remove the pid_file when it exits, so wait for it.
wait_for_pid removed "$mysqlmanager_pid"; return_value=$?
else
log_failure_msg "MySQL manager or server process #$mysqlmanager_pid is not running!"
rm $pid_file
fi

# delete lock for RedHat / SuSE
if test -f $lock_dir
then
rm -f $lock_dir
fi
exit $return_value
else
log_failure_msg "MySQL manager or server PID file could not be found!"
fi
;;

'restart')
# Stop the service and regardless of whether it was
# running or not, start it again.
if $0 stop  $other_args; then
$0 start $other_args
else
log_failure_msg "Failed to stop running server, so refusing to try to start."
exit 1
fi
;;

'reload'|'force-reload')
if test -s "$server_pid_file" ; then
read mysqld_pid <  $server_pid_file
kill -HUP $mysqld_pid && log_success_msg "Reloading service MySQL"
touch $server_pid_file
else
log_failure_msg "MySQL PID file could not be found!"
exit 1
fi
;;
'status')
# First, check to see if pid file exists
if test -s "$server_pid_file" ; then
read mysqld_pid < $server_pid_file
if kill -0 $mysqld_pid 2>/dev/null ; then
log_success_msg "MySQL running ($mysqld_pid)"
exit 0
else
log_failure_msg "MySQL is not running, but PID file exists"
exit 1
fi
else
# Try to find appropriate mysqld process
mysqld_pid=`pidof $libexecdir/mysqld`
if test -z $mysqld_pid ; then
if test "$use_mysqld_safe" = "0" ; then
lockfile=/var/lock/subsys/mysqlmanager
else
lockfile=/var/lock/subsys/mysql
fi
if test -f $lockfile ; then
log_failure_msg "MySQL is not running, but lock exists"
exit 2
fi
log_failure_msg "MySQL is not running"
exit 3
else
log_failure_msg "MySQL is running but PID file could not be found"
exit 4
fi
fi
;;
*)
# usage
echo "Usage: $0  {start|stop|restart|reload|force-reload|status}  [ MySQL server options ]"
exit 1
;;
esac

exit 0

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Upgrade От Debian Etch до Debian Lenny

Ще бъдат кратък, че "много е сложно":
apt-get update && apt-get dist-upgrade

#Заменяте etch със lenny
vim /etc/apt/sources.list
:%s/etch/lenny

apt-get update && apt-get dist-upgrade && reboot

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Upgrade на WordPress от shell.

Вместо да обяснявам ред по ред предоставям простo  sh скриптче което прави всичко:

#!/bin/sh
mysqldb="vashata_baza";
mysqluser="vashiqt_user";
mysqlpass="vashata_parola";
wp_dir="/var/yourblog.com/public_html/";
cd /tmp/
echo "Backup your WordPress DB: $mysqldb";
mysqldump -u$mysqluser -p$mysqlpass $mysqldb > /tmp/wordpress_blog.sql
echo "Backup your Old WordPress";
#cp -Rp $wp_dir /tmp/wordpress_blog_backup/
echo "Download new WordPress";
wget -q http://wordpress.org/latest.zip
unzip /tmp/latest.zip
echo "Replace old WordPress files";
cp -avr /tmp/wordpress/* $wp_dir
echo "Delete temp files";
rm -fr /tmp/latest.zip /tmp/wordpress/
echo "Visit http://yourblog.com/wp-admin/upgrade.php"
echo "Click: Upgrade WordPress Database";
echo "Your WordPress is updated successfully"

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Проблем при php.ini с таговете определящи вашия php код

Случвало ли ви се е да направите php файл с тагове

<?
echo "asd";
?>

и този същия файл да не се изпълнява като php, а като html. Причината е, че в настройките на php е указано да се ползва само тагa "<?php
, а не краткия вариант "<?".

За да се предостави възможност да ползваме отварящи тагове "<?php" и "<?" трябва да редактираме php.ini и да направим следната промяна:

; This directive determines whether or not PHP will recognize code between
; <? and ?> tags as PHP source which should be processed as such. It's been
; recommended for several years that you not use the short tag "short cut" and
; instead to use the full <?php and ?> tag combination. With the wide spread use
; of XML and use of these tags by other languages, the server can become easily
; confused and end up parsing the wrong code in the wrong context. But because
; this short cut has been a feature for such a long time, it's currently still
; supported for backwards compatibility, but we recommend you don't use them.
; Default Value: On
; Development Value: Off
; Production Value: Off
; http://php.net/short-open-tag
short_open_tag = On

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Немърливост в база данни с InnoDB таблици

Няма да конкретизирам проект или сървър, но ще кажа, че таблицата tablicaX беше локната. За целта реших да проверя каква е MyISAM или InnoDB:

mysql> show create table tablicaX;
ERROR 1033 (HY000): Incorrect information in file: './bazaX/tablicaX.frm'

Не става ясно каква е таблицата. Добре. Реших да предположа, че е масовия енжин MyISAM и направих следното:

myisamchk -r '/var/lib/mysql/bazaX/tablicaXs.frm';
myisamchk: error: '/var/lib/mysql/bazaX/tablicaX.frm' is not a MyISAM-table

На практика нещо определено не е в час,  но какво ?!

Отговорът отново е прост: В my.cnf открих skip-innodb .

Просто си активирате InnoDB енжина и всичко е наред. Кофти е, че MySQL не алармира за спирането на InnoDB engine, но той все пак не е пророк 🙂

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Компилиране и инсталиране на PHP 5.3 на Debian Lenny

Не е необходимо системата да бъде Debian Lenny просто тази в момента е такава(както и да е). Освен, че системата е на Debian Lenny, apache- 2.2 и mysql 5.1 . Преминавам по същество как да инсталираме php  5.3 🙂 :

Според моите изисквания отностно конфигурацията на PHP споделям следните options:

./configure --prefix=/usr --with-apxs2=/usr/sbin/apxs \
--with-mysql=/usr/local/mysql51/ \
--with-tidy=/usr \
--with-curl=/usr/bin \
--with-curlwrappers \
--with-openssl-dir=/usr \
--with-zlib-dir=/usr \
--with-xpm-dir=/usr \
--with-pdo-mysql=/usr \
--with-xsl=/usr \
--with-ldap \
--with-xmlrpc \
--with-iconv-dir=/usr \
--with-bz2=/usr \
--with-mcrypt=/usr \
--with-gd \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--with-zlib-dir=/usr \
--with-freetype-dir=/usr \
--with-pear \
--with-imap \
--with-kerberos \
--with-imap-ssl \
--with-libedit \
-enable-exif \
-enable-mbstring \
-enable-calendar \
-enable-zip

При конфигурирането излязоха следните грешки, но хубавото, че това не са грешки, а зависимости които трябва да бъдат спазени. Следващото хубаво нещо е, че по- долу не само ще изброя зависимостите, а и как да бъдат изпълнени правилно:

Проблем: configure: error: xml2-config not found. Please check your libxml2 installation.
Решение: apt-get install libxml2-dev

Проблем: configure: warning: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
Решение: apt-get install re2c

Проблем: configure: error: Please reinstall the BZip2 distribution
Решение: apt-get install libbz2-dev

Проблем: configure: error: Please reinstall the libcurl distribution -- easy.h should be in <curl-dir>/include/curl/
Решение: Инсталиране на Curl от тук

Проблем: configure: error: libjpeg.(a|so) not found.
Решение: apt-get install libjpeg62-dev

Проблем: configure: error: libpng.(a|so) not found.
Решение: apt-get install libpng12-dev

Проблем: configure: error: libXpm.(a|so) not found.
Решение: apt-get install libxpm-dev

Проблем: configure: error: freetype.h not found.
Решение: apt-get install libfreetype6-dev

Проблем: configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing. This should not happen. Check config.log for additional information.
Решение: apt-get install libc-client-dev

Проблем: configure: error: Cannot find ldap.h
Решение: apt-get install libldap2-dev

Проблем: configure: error: mcrypt.h not found. Please reinstall libmcrypt.
Решение: apt-get install libmcrypt-dev

Проблем: configure: error: edit library required by readline not found
Решение: apt-get install libedit-dev

Проблем: configure: error: SNMP sanity check failed. Please check config.log for more information.
Решение: apt-get install libsnmp-dev

Проблем: configure: error: Cannot find libtidy
Решение: apt-get install libtidy-dev

Проблем: configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution
Решение: apt-get install libxslt1-dev

Проблем: checking for mcrypt support… yes
configure: error: mcrypt.h not found. Please reinstall libmcrypt.
Решение: apt-get install libmcrypt-dev

След това се изпълнява:

make && make install

Препоръчително е да изпълните преди "make install" "make test"

Voila: Thank you for using PHP.

Необходимо е да активирате php5 модула в Apache 2.2 по- следния метод:

a2enmod php5
Enabling module php5.
Run '/etc/init.d/apache2 restart' to activate new configuration!

/etc/init.d/apache2 restart

За малко да забравим да копираме php.ini в неговата директория 🙂

cp /tmp/php-5.3.0/php.ini-production /usr/lib/php.ini

Сега ще сетнем и подразбираща времева зона:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone =Europe/Sofia

Идеята е, че ако времевата зона на машината не е сетната правилно и от PHP извикате функция Date() ше ви изведе следната грешка:

Warning: date() [function.date]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Sofia' for 'EEST/3.0/DST' instead in /var/www/test1.php on line 2
2009-10-21

Рестартираме (не reload, а restart !) Apache2 за да влязат новите промени в действие.

Това е всичко. Вече имате последна стабилна версия на PHP 5.3

Други проблеми:

Проблем: Зареждате модула php и всичко се очаква да е наред, но Apache все още не php файловете не се изпълняват.
Решение: Трябва да се добави в конф. файл как да се употребяват *.php файловете /etc/apache2/httpd.conf :

<IfModule mime_module>
AddType application/x-httpd-php .php .phtml .php3
AddType application/x-httpd-php-source .phps

</IfModule>

Проблем: При php.ini с таговете определящи вашия php код.
Решение натиснете ТУК

PS: Много внимавайте при конфигурацията на PHP с използването на -enable , --with . Забележете, че "enable" е с една чертичка отпред, а "with" с две черти. Ако напишете "--enable" (enable с две чертички) то това ще ви донесе неприятности в къщи 🙂

<IfModule mime_module>
AddType application/x-httpd-php .php .phtml .php3
AddType application/x-httpd-php-source .phps
</IfModule>
VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Как да сетнем wait_timeout na постоянна връзка към mysql- pconnect

По поздразбиране времето за затваряне на persistent connection в MySQL е доста секунди, но аз искам да променя това време на по- малко, примерно 15 секунди. Това може да се направи от my.cnf,  но ще бъде сетване на всички Persistent connections (постоянни връзки), а аз искам само на текущата. Все пак за инфо как се сетва wait_timout в my.cnf

Файл: /etc/mysq/my.cnf
wait_timeout = 1800
/etc/init.d/mysqd restart
Има и друг вариант да сетнете от Mysql, wait_timeout за глобално ползване или чрез: mysql> set global wait_timeout=60 . Но този вариант няма да е така дълготраен колкото по- горния

Тук идеята обаче не е тази. Решението разбира се е както обикновенно доста простично. След като се напарави постоянна връзка се изпълнява сетването на wait_timeout. Ето пример за това:

mysql> set @@session.wait_timeout=360;

След като сетнахме секундите които трябва да изтекат преди да се затвори постоянната връзка сега можем да проверим дали всичко е наред:

mysql> select @@session.wait_timeout,@@global.wait_timeout;
+---------------------------------------+------------------------------+
| @@session.wait_timeout             | @@global.wait_timeout |
+---------------------------------------+-------------------------------+
|                                                    28800 |                                 360 |
+-----------------------------9--------+-------------------------------+
1 row in set (0.00 sec)

Очевидно всеки си е задал въпроса: Защо му е да ограничава persistent connection на 15 секунди след като може да използва обикновенна връзка mysql_connect с възможност за затваряне веднага след изпълнение на скрипта (mysql_close)? Отговорът е защото заявките които се изпълняват са в рамките на 15 секунди т.е. за 15 секунди могат да се изпълнят 20 заявки в случаен интервал т.е. не е ясно кога трябва да се затвори връзката и кога не. За целта използвам pconnect с времеви прозорец 15 секунди и абсолютно всичко работи прекрасно.

PS: Това може да бъде решение на въпроса "mysql_connect има възможност за затваряне след изпълнение mysql_close, но mysql_pconnect няма mysql_pclose" Като се окаже малко време на практика това ще бъде неформално mysql_pclose.

VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)