1.首先下载mysql源码
wget http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.1/mysql-5.1.73.tar.gz
2.解压
3../configure --prefix=/usr/local/mysql/ --localstatedir=/usr/local/mysql/data --without-debug --with-unix-socket-path=/tmp/mysql.sock --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --enable-assembler --with-extra-charsets=gbk,gb2312,utf8 --with-pthread
注意:如果报sql_udf.o:undefined in glibc的话,做如下调整:
export CFLAGS="-O2 -DHAVE_DLOPEN=1"
export CXXFLAGS="-O2 -DHAVE_DLOPEN=1"
./configure --prefix=/usr/local/mysql/ --localstatedir=/usr/local/mysql/data --without-debug --with-unix-socket-path=/tmp/mysql.sock --with-extra-charsets=gbk,gb2312,utf8 --with-pthread
编译参数解释:
--prefix=/usr/local/mysql/:指定安装位置
--localstatedir=/usr/local/mysql/data:指定数据库文件位置
--without-debug:禁用调用模式
--with-unix-socket-path=/tmp/mysql.sock:指定sock文件位置
--with-client-ldflags=-all-static:
--with-mysqld-ldflags=-all-static:以纯静态方式编译服务端和客户端
--enable-assembler:使用一些字符函数的汇编版本
--with-extra-charsets=gbk,gb2312,utf8 :gbk,gb2312,utf8字符支持
--with-pthread:强制使用pthread库(posix线程库)
4.make && make install
5.cp support-files/my-medium.cnf /etc/my.cnf //复制配置文件夹my.cnf
6./usr/local/mysql/bin/mysql_install_db --user=mysql //初始化数据库
7.cp support-files/mysql.server /etc/rc.d/init.d/mysqld //init启动脚本
8.如果第6步骤没有配置--user或者--user是启动用户名,执行service mysqld start 出错:Starting MySQL. ERROR! Manager of pid-file quit without updating file.
9.解决错误方法:chown -R mysql /usr/local/mysql/data
10.[root@localhost support-files]# ./mysql.server start
Starting MySQL. SUCCESS!
11.修改密码:
/usr/local/mysql/bin/mysqladmin -u root password '新密码'
12.登录并且删除匿名用户:
/usr/local/mysql/bin/mysql -u root -p
Enter password:
mysql> show databases;
mysql> use mysql;
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| event |
| func |
| general_log |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| host |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| servers |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
23 rows in set (0.00 sec)
mysql> delete from user where user='';
Query OK, 2 rows affected (0.00 sec)
mysql> quit
Bye
这是匿名用户, 默认从本地是可以用匿名用户登录, 但是用匿名用户登录, 只能看到test库。删完了别忘了重启啊!!!!
13.重启mysqld:service mysqld restart
14.Q&A
(1)mysql安装的时候,有一步是mysql_install_db --user=mysql,必须这样吗?
答:<1>.生成授权表实际上是完成了mysql的初始化。你在执行这个脚本之后,mysql里就会出现名为mysql的库。mysql库里有常用的权限表等系统表。比如设置用户权限的user表。
<2>.后面的参数--user所指定的用户是你想要运行mysqld进程用户名。这个是可变的,不一定非要是mysql。设置这个用户以后,所有通过mysqld进程创建的文件都会属于这个用户。网上的教程里多用mysql用户是为了在生产环境中更方便管理。
(2)那mysql目录以及其下的所有文件所有者都必须是mysql吗?这是必要的么?还有所属组?
答:这个不是必须的。但是组最好设定为mysql组。在进行权限管理时方便管理。
linux系统默认用户(比如root)也是可以的。但是在生产环境中,一般只需要将日志的路径(配置文件中日志的路径),和数据文件路径(datadir参数)设置为mysql用户就可以了。(这个不同的公司也有不同的设置,但是简单来说是这样的。)
上面说的其实都是linux系统权限管理的内容。有些文件,比如你不希望其他用户看到的文件,或者只有指定用户可写的文件,就可以设定成某个特殊用户。至于你后面问的所属组的问题。这个也是权限管理的一部分。比如说,一个文件的用户权限是root,组权限是mysql,这样的文件就只能root用户和mysql组里的用户访问。
(3)那是不是说即使不设置用户和所属组,也不影响使用?
答:是的。不设置也并不影响使用。因为linux默认用户是root。mysql的基本权限就都涵盖了。
因此可以这样理解:用户和用户组的作用一般是为了在生产过程中进行系统级的权限管理。
个人观点:会有影响,启动时会报错入第8条那样。