lnmp安装--linux通过tar.gz源码包安装mysql

时间:2022-06-01 20:20:54

mysql版本:5.6 【http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.22.tar.gz】

        【http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.24.tar.gz】

官方参考:http://dev.mysql.com/doc/refman/5.6/en/installing-source-distribution.html

 

安装要求:

这里提到的安装要求:

http://dev.mysql.com/doc/refman/5.6/en/source-installation.html

需要工具:CMake  http://www.cmake.org

make工具:http://www.gnu.org/software/make/   GNU make 3.75 or newer 

ANSI C++ compiler:GCC 4.2.1 or later 

Perl : Perl is needed if you intend to run test scripts 【option】

bison : 2.1 or newer

M4:On OpenSolaris and Solaris Express

 

而这里的安装要求:

http://dev.mysql.com/doc/internals/en/cmake-prerequisites.html

安装CMake的要求:

CMake:Version 2.6.3 or later    http://dev.mysql.com/doc/internals/en/cmake.html

Unix: Compiler and make utility【gcc,make】, curses dev package on Linux     

All platforms: bison         http://ftp.gnu.org/gnu/bison/bison-2.5.tar.gz 

OpenSolaris/Solaris: m4       http://www.gnu.org/software/m4/

大家可以看到两个要求是一致的(废话肯定一致,两个本来说的就是一个事。只是为了避免大家迷惑才两个都拿来说)

 

安装mysql配置项:

http://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html

要注意的就是安装自己用到的字符集,data目录配置,存储引擎的支持【innodb需要明确配置,My_ISAM默认会安装】

-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1

 

字符集 可以在随便一个mysql中执行 SHOW COLLATION 语句,查看所有的。

 在正式安装之前,你可能需要安装:ncurses , ncurses-devel

上面有ncurse包:
[root@host ncurse]#.
/configure
[root@host ncurse]#make
&&make install

正式安装:

  345  tar zxvf mysql-5.6.22.tar.gz 
346 ls
347 cd mysql-5.6.22
348 ls
349 groupadd mysql
350 useradd -r -g mysql mysql
351 cmake .
352 make
353 cmake --help
354 make clean
355 rm CMakeCache.txt
356 make install
357 cd /usr/local/mysql/
358 chown -R mysql .
359 chgrp -R mysql .
360 scripts/mysql_install_db --user=mysql
361 chown -R root .
362 chown -R mysql data
363 bin/mysqld_safe --user=mysql &
364 /usr/local/mysql/bin/mysql -uroot -p
365 ls /tmp/
366 ls /tmp/mysql.sock
367 bin/mysqld_safe --user=mysql &
368 netstat -an |grep 3306
371 ps aux |grep mysql
372 bin/mysqld_safe --user=mysql &
373 less /var/log/mysqld.log
374 mkdir /var/run/mysqld
375 chown -R mysql /var/run/mysqld
376 bin/mysqld_safe --user=mysql &
377 bin/mysql -uroot -p
378 ps aux |grep mysql
379 netstat -an |grep 3306
380 bin/mysql -uroot -p
382 ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
384 bin/mysql -uroot -p
397 cp /usr/local/mysql/support-files/mysql.serve /etc/init.d/mysqld
398 chkconfig --add mysqld
399 chkconfig --level 345 mysqld on
400 service mysqld stop
401 service mysqld restart
402 pkill mysql
403 service mysqld restart
404 bin/mysql -uroot -p
405 halt
407 service mysqld start

安装完成。

中间遇到的问题:

安装完成后mysql启动不了:

启动mysql时报错:

Starting mysqld daemon with databases
from /var/lib/mysql
STOPPING server
from pid file /var/run/mysqld/mysqld.pid
071112 00:22:06 mysqld ended
查看日志:
#less
/var/log/mysqld.log
其中有一段如下:


071112 0:22:06 [ERROR] /usr/local/mysql/bin/mysqld: Can't create/write to file '/var/run/mysqld/mysqld.pid' (Errcode: 2)
071112 0:22:06 [ERROR] Can't start server: can't create PID file: No such file or directory
071112 00:22:06 mysqld ended
#cd
/var/run/
#ls

mysqld目录不存在,创建。

374 mkdir /var/run/mysqld
375 chown -R mysql /var/run/mysqld

 

 

可以正常启动了,但是用客户端连接mysqld 又错:

[root@localhost mysql]# bin/mysqladmin -u root password root
bin
/mysqladmin: connect to server at 'localhost' failed
error:
'Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)'
Check that mysqld is running and that the socket: '/tmp/mysql.sock' exists!
[root@localhost mysql]# bin
/mysql -u root -p
Enter password:
ERROR
2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
分析:是/tmp/mysql.sock 不存在

由于mysql 默认的mysql.sock 是在/var/lib/mysql/mysql.sock,创建符号连接:

  382  ln -s /var/lib/mysql/mysql.sock  /tmp/mysql.sock

再重启,可以了。

 如果第一次cmake有问题,需要二次cmake,记得将CMakeCache.txt清理掉,否则新的cmake会不起作用。

lnmp安装--linux通过tar.gz源码包安装mysqllnmp安装--linux通过tar.gz源码包安装mysql
  1 #!/bin/sh
2 # Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
3 # This file is public domain and comes with NO WARRANTY of any kind
4
5 # MySQL daemon start/stop script.
6
7 # Usually this is put in /etc/init.d (at least on machines SYSV R4 based
8 # systems) and linked to /etc/rc3.d/S99mysql and /etc/rc0.d/K01mysql.
9 # When this is done the mysql server will be started when the machine is
10 # started and shut down when the systems goes down.
11
12 # Comments to support chkconfig on RedHat Linux
13 # chkconfig: 2345 64 36
14 # description: A very fast and reliable SQL database engine.
15
16 # Comments to support LSB init script conventions
17 ### BEGIN INIT INFO
18 # Provides: mysql
19 # Required-Start: $local_fs $network $remote_fs
20 # Should-Start: ypbind nscd ldap ntpd xntpd
21 # Required-Stop: $local_fs $network $remote_fs
22 # Default-Start: 2 3 4 5
23 # Default-Stop: 0 1 6
24 # Short-Description: start and stop MySQL
25 # Description: MySQL is a very fast and reliable SQL database engine.
26 ### END INIT INFO
27
28 # If you install MySQL on some other places than /usr/local/mysql, then you
29 # have to do one of the following things for this script to work:
30 #
31 # - Run this script from within the MySQL installation directory
32 # - Create a /etc/my.cnf file with the following information:
33 # [mysqld]
34 # basedir=<path-to-mysql-installation-directory>
35 # - Add the above to any other configuration file (for example ~/.my.ini)
36 # and copy my_print_defaults to /usr/bin
37 # - Add the path to the mysql-installation-directory to the basedir variable
38 # below.
39 #
40 # If you want to affect other MySQL variables, you should make your changes
41 # in the /etc/my.cnf, ~/.my.cnf or other MySQL configuration files.
42
43 # If you change base dir, you must also change datadir. These may get
44 # overwritten by settings in the MySQL configuration files.
45
46 basedir=
47 datadir=
48
49 # Default value, in seconds, afterwhich the script should timeout waiting
50 # for server start.
51 # Value here is overriden by value in my.cnf.
52 # 0 means don't wait at all
53 # Negative numbers mean to wait indefinitely
54 service_startup_timeout=900
55
56 # Lock directory for RedHat / SuSE.
57 lockdir='/var/lock/subsys'
58 lock_file_path="$lockdir/mysql"
59
60 # The following variables are only set for letting mysql.server find things.
61
62 # Set some defaults
63 mysqld_pid_file_path=
64 if test -z "$basedir"
65 then
66 basedir=/usr/local/mysql
67 bindir=/usr/local/mysql/bin
68 if test -z "$datadir"
69 then
70 datadir=/usr/local/mysql/data
71 fi
72 sbindir=/usr/local/mysql/bin
73 libexecdir=/usr/local/mysql/bin
74 else
75 bindir="$basedir/bin"
76 if test -z "$datadir"
77 then
78 datadir="$basedir/data"
79 fi
80 sbindir="$basedir/sbin"
81 libexecdir="$basedir/libexec"
82 fi
83
84 # datadir_set is used to determine if datadir was set (and so should be
85 # *not* set inside of the --basedir= handler.)
86 datadir_set=
87
88 #
89 # Use LSB init script functions for printing messages, if possible
90 #
91 lsb_functions="/lib/lsb/init-functions"
92 if test -f $lsb_functions ; then
93 . $lsb_functions
94 else
95 log_success_msg()
96 {
97 echo " SUCCESS! $@"
98 }
99 log_failure_msg()
100 {
101 echo " ERROR! $@"
102 }
103 fi
104
105 PATH="/sbin:/usr/sbin:/bin:/usr/bin:$basedir/bin"
106 export PATH
107
108 mode=$1 # start or stop
109
110 [ $# -ge 1 ] && shift
111
112
113 other_args="$*" # uncommon, but needed when called from an RPM upgrade action
114 # Expected: "--skip-networking --skip-grant-tables"
115 # They are not checked here, intentionally, as it is the resposibility
116 # of the "spec" file author to give correct arguments only.
117
118 case `echo "testing\c"`,`echo -n testing` in
119 *c*,-n*) echo_n= echo_c= ;;
120 *c*,*) echo_n=-n echo_c= ;;
121 *) echo_n= echo_c='\c' ;;
122 esac
123
124 parse_server_arguments() {
125 for arg do
126 case "$arg" in
127 --basedir=*) basedir=`echo "$arg" | sed -e 's/^[^=]*=//'`
128 bindir="$basedir/bin"
129 if test -z "$datadir_set"; then
130 datadir="$basedir/data"
131 fi
132 sbindir="$basedir/sbin"
133 libexecdir="$basedir/libexec"
134 ;;
135 --datadir=*) datadir=`echo "$arg" | sed -e 's/^[^=]*=//'`
136 datadir_set=1
137 ;;
138 --pid-file=*) mysqld_pid_file_path=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
139 --service-startup-timeout=*) service_startup_timeout=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
140 esac
141 done
142 }
143
144 wait_for_pid () {
145 verb="$1" # created | removed
146 pid="$2" # process ID of the program operating on the pid-file
147 pid_file_path="$3" # path to the PID file.
148
149 i=0
150 avoid_race_condition="by checking again"
151
152 while test $i -ne $service_startup_timeout ; do
153
154 case "$verb" in
155 'created')
156 # wait for a PID-file to pop into existence.
157 test -s "$pid_file_path" && i='' && break
158 ;;
159 'removed')
160 # wait for this PID-file to disappear
161 test ! -s "$pid_file_path" && i='' && break
162 ;;
163 *)
164 echo "wait_for_pid () usage: wait_for_pid created|removed pid pid_file_path"
165 exit 1
166 ;;
167 esac
168
169 # if server isn't running, then pid-file will never be updated
170 if test -n "$pid"; then
171 if kill -0 "$pid" 2>/dev/null; then
172 : # the server still runs
173 else
174 # The server may have exited between the last pid-file check and now.
175 if test -n "$avoid_race_condition"; then
176 avoid_race_condition=""
177 continue # Check again.
178 fi
179
180 # there's nothing that will affect the file.
181 log_failure_msg "The server quit without updating PID file ($pid_file_path)."
182 return 1 # not waiting any more.
183 fi
184 fi
185
186 echo $echo_n ".$echo_c"
187 i=`expr $i + 1`
188 sleep 1
189
190 done
191
192 if test -z "$i" ; then
193 log_success_msg
194 return 0
195 else
196 log_failure_msg
197 return 1
198 fi
199 }
200
201 # Get arguments from the my.cnf file,
202 # the only group, which is read from now on is [mysqld]
203 if test -x ./bin/my_print_defaults
204 then
205 print_defaults="./bin/my_print_defaults"
206 elif test -x $bindir/my_print_defaults
207 then
208 print_defaults="$bindir/my_print_defaults"
209 elif test -x $bindir/mysql_print_defaults
210 then
211 print_defaults="$bindir/mysql_print_defaults"
212 else
213 # Try to find basedir in /etc/my.cnf
214 conf=/etc/my.cnf
215 print_defaults=
216 if test -r $conf
217 then
218 subpat='^[^=]*basedir[^=]*=\(.*\)$'
219 dirs=`sed -e "/$subpat/!d" -e 's//\1/' $conf`
220 for d in $dirs
221 do
222 d=`echo $d | sed -e 's/[ ]//g'`
223 if test -x "$d/bin/my_print_defaults"
224 then
225 print_defaults="$d/bin/my_print_defaults"
226 break
227 fi
228 if test -x "$d/bin/mysql_print_defaults"
229 then
230 print_defaults="$d/bin/mysql_print_defaults"
231 break
232 fi
233 done
234 fi
235
236 # Hope it's in the PATH ... but I doubt it
237 test -z "$print_defaults" && print_defaults="my_print_defaults"
238 fi
239
240 #
241 # Read defaults file from 'basedir'. If there is no defaults file there
242 # check if it's in the old (depricated) place (datadir) and read it from there
243 #
244
245 extra_args=""
246 if test -r "$basedir/my.cnf"
247 then
248 extra_args="-e $basedir/my.cnf"
249 else
250 if test -r "$datadir/my.cnf"
251 then
252 extra_args="-e $datadir/my.cnf"
253 fi
254 fi
255
256 parse_server_arguments `$print_defaults $extra_args mysqld server mysql_server mysql.server`
257
258 #
259 # Set pid file if not given
260 #
261 if test -z "$mysqld_pid_file_path"
262 then
263 mysqld_pid_file_path=$datadir/`hostname`.pid
264 else
265 case "$mysqld_pid_file_path" in
266 /* ) ;;
267 * ) mysqld_pid_file_path="$datadir/$mysqld_pid_file_path" ;;
268 esac
269 fi
270
271 case "$mode" in
272 'start')
273 # Start daemon
274
275 # Safeguard (relative paths, core dumps..)
276 cd $basedir
277
278 echo $echo_n "Starting MySQL"
279 if test -x $bindir/mysqld_safe
280 then
281 # Give extra arguments to mysqld with the my.cnf file. This script
282 # may be overwritten at next upgrade.
283 $bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null 2>&1 &
284 wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?
285
286 # Make lock for RedHat / SuSE
287 if test -w "$lockdir"
288 then
289 touch "$lock_file_path"
290 fi
291
292 exit $return_value
293 else
294 log_failure_msg "Couldn't find MySQL server ($bindir/mysqld_safe)"
295 fi
296 ;;
297
298 'stop')
299 # Stop daemon. We use a signal here to avoid having to know the
300 # root password.
301
302 if test -s "$mysqld_pid_file_path"
303 then
304 mysqld_pid=`cat "$mysqld_pid_file_path"`
305
306 if (kill -0 $mysqld_pid 2>/dev/null)
307 then
308 echo $echo_n "Shutting down MySQL"
309 kill $mysqld_pid
310 # mysqld should remove the pid file when it exits, so wait for it.
311 wait_for_pid removed "$mysqld_pid" "$mysqld_pid_file_path"; return_value=$?
312 else
313 log_failure_msg "MySQL server process #$mysqld_pid is not running!"
314 rm "$mysqld_pid_file_path"
315 fi
316
317 # Delete lock for RedHat / SuSE
318 if test -f "$lock_file_path"
319 then
320 rm -f "$lock_file_path"
321 fi
322 exit $return_value
323 else
324 log_failure_msg "MySQL server PID file could not be found!"
325 fi
326 ;;
327
328 'restart')
329 # Stop the service and regardless of whether it was
330 # running or not, start it again.
331 if $0 stop $other_args; then
332 $0 start $other_args
333 else
334 log_failure_msg "Failed to stop running server, so refusing to try to start."
335 exit 1
336 fi
337 ;;
338
339 'reload'|'force-reload')
340 if test -s "$mysqld_pid_file_path" ; then
341 read mysqld_pid < "$mysqld_pid_file_path"
342 kill -HUP $mysqld_pid && log_success_msg "Reloading service MySQL"
343 touch "$mysqld_pid_file_path"
344 else
345 log_failure_msg "MySQL PID file could not be found!"
346 exit 1
347 fi
348 ;;
349 'status')
350 # First, check to see if pid file exists
351 if test -s "$mysqld_pid_file_path" ; then
352 read mysqld_pid < "$mysqld_pid_file_path"
353 if kill -0 $mysqld_pid 2>/dev/null ; then
354 log_success_msg "MySQL running ($mysqld_pid)"
355 exit 0
356 else
357 log_failure_msg "MySQL is not running, but PID file exists"
358 exit 1
359 fi
360 else
361 # Try to find appropriate mysqld process
362 mysqld_pid=`pidof $libexecdir/mysqld`
363
364 # test if multiple pids exist
365 pid_count=`echo $mysqld_pid | wc -w`
366 if test $pid_count -gt 1 ; then
367 log_failure_msg "Multiple MySQL running but PID file could not be found ($mysqld_pid)"
368 exit 5
369 elif test -z $mysqld_pid ; then
370 if test -f "$lock_file_path" ; then
371 log_failure_msg "MySQL is not running, but lock file ($lock_file_path) exists"
372 exit 2
373 fi
374 log_failure_msg "MySQL is not running"
375 exit 3
376 else
377 log_failure_msg "MySQL is running but PID file could not be found"
378 exit 4
379 fi
380 fi
381 ;;
382 *)
383 # usage
384 basename=`basename "$0"`
385 echo "Usage: $basename {start|stop|restart|reload|force-reload|status} [ MySQL server options ]"
386 exit 1
387 ;;
388 esac
389
390 exit 0
mysqld加入服务的脚本

 

参考:

http://blog.csdn.net/itchiang/article/details/9012493

跟两个无关的yum配置连接,我中间做其他事情用到了。

http://www.cnblogs.com/shuaixf/archive/2011/11/30/2268496.html
http://blog.chinaunix.net/uid-26683523-id-3074744.html

 

lnmp环境的操作部分:

安装php+nginx:http://www.cnblogs.com/simpman/p/4151662.html

安装mysql:http://www.cnblogs.com/simpman/p/4192942.html

安装php:http://www.cnblogs.com/simpman/p/4196051.html

lnmp环境的理论部分:

FastCgi与PHP-fpm关系[转] 读完本文瞬间明朗了很多 : http://www.cnblogs.com/simpman/p/4151639.html

epoll和select区别:http://www.cnblogs.com/simpman/p/4150005.html