Linux 源码安装mysql及配置

建议:如果你是新手,请先全文通读一遍后在安装。不用太过详细的看命令,直接看中文,知道出现问题下面有解决方法就行了。

注意:以 vi 开头的命令强烈建议自己敲,因为复制下来的可能会有问题。

系统:centos5.5  mysql5.5和5.0都可以使用

不同版本的系统可能操作不太一样,请注意。我尽量保证发布出来的代码都经过测试。但难免有部分遗漏,如发现问题,请在下方留言。我会抽时间修改的。

Cmake下载地址:http://www.cmake.org/cmake/resources/software.html

Mysql下载地址: http://www.mysql.com

1.假设已经有mysql-5.5.25.tar.gz以及cmake-2.8.4.tar.gz两个源文件

(1)先安装cmakemysql5.5以后是通过cmake来编译的,5.5以前的版本不需要安装)

[root@ L160 local]# tar -xf cmake-2.8.4.tar.gz
[root@ L160 local]# cd cmake-2.8.4
[root@ L160 cmake-2.8.4]# ./configure
[root@ L160 cmake-2.8.4]# make
[root@ L160 cmake-2.8.4]# make install

(2)创建mysql的安装目录及数据库存放目录

[root@ L160~]# mkdir -p /usr/local/mysql                 //安装mysql 
[root@ L160~]# mkdir -p /usr/local/mysql/data            //存放数据库

(3)创建mysql用户及用户组

[root@ L160~]# groupadd mysql
[root@ L160~]# useradd -r -g mysql mysql

(4)安装mysql

[root@ L160 local]# tar -xf mysql-5.5.25.tar.gz
[root@ L160 local]# cd mysql-5.5.25
//5.5的命令 [root@ L160 mysql-5.5.10]# cmake . \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data\ -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci\ -DEXTRA_CHARSETS=all -DENABLED_LOCAL_INFILE=1 注意:上面的是一条命令
//5.0的命令:
./configure  --prefix=/opt/cuix/ mysql-5.0.51 --with-charset=utf8 
 --with-collation=utf8_general_ci 
           
[root@ L160 mysql-5.5.10]#make

如果你机器性能不是很好,有可能出现一堆的警告。百度了一下,说是gcc升级引起的。同样的系统(自带gcc),我在服务器上就没有警告,我用虚拟机装就会警告。搞不懂是怎么回事了。。
[root@L160 bin]# echo $?    //查询上一个程序执行成功没有
0    //0代表成功,其他代表失败,好了什么警告之类的直接扔到爪哇国去
下面的是警告信息:

提领类型双关的指针将破坏强重叠规则

warning: dereferencing type-punned pointer will break strict-aliasing rules

[root@ L160 mysql-5.5.10]# make install   //安装

参数说明:

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql        //安装目录

-DINSTALL_DATADIR=/usr/local/mysql/data         //数据库存放目录

-DDEFAULT_CHARSET=utf8                        //使用utf8字符

-DDEFAULT_COLLATION=utf8_general_ci            //校验字符

-DEXTRA_CHARSETS=all                            //安装所有扩展字符集

-DENABLED_LOCAL_INFILE=1                        //允许从本地导入数据

详细的参数说明请参考:http://dev.mysql.com/doc/refman/5.5/en/source-configuration-options.html

注意事项:

重新编译时,需要清除旧的对象文件和缓存信息。

# make clean

# rm -f CMakeCache.txt

# rm -rf /etc/my.cnf

2.配置

(1)设置目录权限

[root@ L160~]# cd /usr/local/mysql

[root@ L160 mysql]# chown -R root:mysql . //把当前目录中所有文件的所有者所有者设为root,所属组为mysql。注意mysql后有个空格和点
[root@ L160 mysql]# chown -R mysql:mysql data

(2)mysql的启动服务添加到系统服务中

[root@ L160 mysql]# cp support-files/my-medium.cnf /etc/my.cnf //my-medium.cnf不仅限于这一个文件
//查看可以使用的文件
[root@L160 mysql]# cd support-files/
[root@L160 support-files]# ll
#下面列出的×.cnf结尾的都可以,但是每一个都有不同的用处,具体的请自己Google
total 152 -rwxr-xr-x 1 root mysql 1153 May 29 11:14 binary-configure -rwxr-xr-x 1 root mysql 4528 May 29 11:14 config.huge.ini -rwxr-xr-x 1 root mysql 2382 May 29 11:14 config.medium.ini -rwxr-xr-x 1 root mysql 1626 May 29 11:14 config.small.ini -rw-r--r-- 1 root mysql 773 Jul 2 2012 magic -rw-r--r-- 1 root mysql 4691 May 29 11:14 my-huge.cnf -rw-r--r-- 1 root mysql 19759 May 29 11:14 my-innodb-heavy-4G.cnf -rw-r--r-- 1 root mysql 4665 May 29 11:14 my-large.cnf -rw-r--r-- 1 root mysql 4676 May 29 11:14 my-medium.cnf -rw-r--r-- 1 root mysql 2840 May 29 11:14 my-small.cnf -rwxr-xr-x 1 root mysql 1061 May 29 11:14 mysqld_multi.server -rwxr-xr-x 1 root mysql 839 May 29 11:14 mysql-log-rotate -rwxr-xr-x 1 root mysql 10650 May 29 11:14 mysql.server -rwxr-xr-x 1 root mysql 1326 May 29 11:14 ndb-config-2-node.ini

(3)创建系统数据库的表

[root@ L160 mysql]# cd /usr/local/mysql
[root@ L160 mysql]# scripts/mysql_install_db --user=mysql

(4)设置环境变量

(方法1:已测试

[root@ L160~]# vi /etc/profile

添加红色部分内容
# Path manipulation
if [ "$EUID" = "0" ]; then
        pathmunge /sbin
        pathmunge /usr/sbin
        pathmunge /usr/local/sbin
        pathmunge /usr/local/mysql/bin/
fi
[root@ L160
~]# source /etc/profile

(方法2:未测试

[root@ L160~]# vi /root/.bash_profile

在PATH=$PATH:$HOME/bin添加参数为:

PATH=$PATH:$HOME/bin:/usr/local/mysql/bin:/usr/local/mysql/lib

[root@ L160~]# source /root/.bash_profile

(5)mysql添加到系统服务中

[root@ L160 mysql]# cd /usr/local/mysql
[root@ L160 mysql]# cp support-files/mysql.server /etc/init.d/mysql //将mysql的启动服务添加到系统服务中 

 注意:主要是将mysql.server拷贝到/etc/init.d中,并命名为mysql(有的教程是命名为  mysqld   这个命名关系到下一步的启动和加入开机启动的命令)。
 在有的系统中,mysql.server在/usr/local/mysql/share/mysql/mysql.server中。
而本系统中,mysql.server在/usr/
local/mysql/support-files/mysql.server中。

(6)启动mysql的方法(mysql已经被添加到系统服务中)

[root@ L160~]# service mysql start  //启动mysql服务
***********************************************
[root@ L160~]# service mysql stop  //停止mysql服务 [root@ L160~]# service mysql restart //重启mysql服务 如果上述命令出现:

  mysql: unrecognized service    //mysql 未识别的服务

则可能mysql还没添加到系统服务中,请参考上一步

(7)修改MySQLroot用户的密码以及打开远程连接

[root@L160 mysql]#  mysql -u root -p
Enter password:
//这里MySQL的root用户还没有配置密码,所以为空值。需要输入密码时,直接点回车键即可。
Welcome to the MySQL monitor.  Commands end with ; or \g.
..........................中间省略..........................
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use mysql; //使用mysql这个库
Database changed
mysql> desc user; 
+------------------------+-----------------------------------+------+-----+---------+-------+
| Field                  | Type                              | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+---------+-------+
| Host                   | char(60)                          | NO   | PRI |         |       |
 .................................中间省略...........................................................
| authentication_string  | text                              | YES  |     | NULL    |       |
+------------------------+-----------------------------------+------+-----+---------+-------+
42 rows in set (0.01 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "root";  //添加远程连接
Query OK, 0 rows affected (0.01 sec)

mysql> update user set Password = password('123456') where User='root'; //为root用户设置密码:123456
mysql> update user set authentication_string=password('123456') where User='root'; // mysql 5.7.*适用 Query OK, 5 rows affected (0.00 sec) Rows matched: 5 Changed: 5 Warnings: 0 mysql> select Host,User,Password from user where User='root';
mysql> select Host,User,authentication_string from user where User='root'; //mysql 5.7.* 适用
+-----------+------+-------------------------------------------+ | Host | User | Password | +-----------+------+-------------------------------------------+ | localhost | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | L160 | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | 127.0.0.1 | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | ::1 | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | % | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | +-----------+------+-------------------------------------------+ 5 rows in set (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> exit Bye
重新登录: [root@ L160 mysql]
# mysql -u root -p

若还不能进行远程连接,则查看防火墙是否开启

[root@ L160~]# /etc/init.d/iptables status   //会得到一系列信息,说明防火墙开着。

关闭防火墙(重启失效)

[root@ L160~]# /etc/rc.d/init.d/iptables stop

禁用防火墙(永久关闭)

[root@ L160~]# chkconfig iptables off

当然你也可以添加防火墙规则,这个你就自己搞吧。有时间我会更新上来的

(8)设置开机启动

[root@ L160~]# chkconfig --level 345 mysql on  //设置开机启动(如果你要取消开机启动:把 on 改为 off 就行了)

(9)修改mysql的最大连接数

mysql默认安装的最大连接数是100100一般是不够用的。要增大连接数,要怎样增加呢?

[root@ L160~]# vi /etc/my.cnf  

# The MySQL server
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 4M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
#一定要加在[mysqld]这段里面,根据你的需求自行更改数据
max_connections=1000            # 最大连接数
max_user_connections=500     # 每个用户最大连接数
wait_timeout=200                    # 多少秒后关闭空闲(IDLE)

检测:

[root@ L160~]# service mysql restart  //重启mysql服务
[root@ L160~]# cd /usr/local/mysql/bin
[root@ L160~]# mysqladmin -u root -p variables    //检测

输入root数据库账号的密码后可看到 (屏幕上的数据有点多,慢慢找)

|max_connections                | 1000
|max_user_connections        | 500
|wait_timeout                    | 200
#改动已经生效。

(10)查看修改mysql编码方式

MySQL的默认编码是Latin1,不支持中文,要支持中文需要把数据库的默认编码修改为gbk或者utf8(java的一般都是用utf-8,乱码问题蛋疼啊,我就用utf-8演示)。

1、需要以root用户身份登陆才可以查看数据库编码方式
[root@L160 bin]# mysql -u root -p
Enter password:

查看数据库的编码的命令:

mysql> show variables like 'character%';
+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | utf8                             |
| character_set_connection | utf8                             |
| character_set_database   | latin1                           |
| character_set_filesystem | binary                           |
| character_set_results    | utf8                             |
| character_set_server     | latin1                           |
| character_set_system     | utf8                             |
| character_sets_dir       | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+
8 rows in set (0.00 sec)

为了测试这个,我先重装个mysql

2、停止mysql服务

[root@L160 etc]# service mysql stop
Shutting down MySQL.                                       [  OK  ]

3、编辑my.cnf

[root@L160 etc]# vi /etc/my.cnf
//添加红色部分的内容
# The following options will be passed to all MySQL clients
[client]
#password       = your_password
port            = 3306
socket          = /tmp/mysql.sock
default-character-set=utf8

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
port            = 3306
.............省略................
max_connections=1000            # 最大连接数
max_user_connections=500     # 每个用户最大连接数
wait_timeout=200                    # 多少秒后关闭空闲(IDLE)
character-set-server =utf8

4、检查

[root@L160 etc]# service mysql start
Starting MySQL..                                           [  OK  ]
[root@L160 etc]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g. ..................省略.........................................
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show variables like 'character%';
+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | utf8                             |
| character_set_connection | utf8                             |
| character_set_database   | utf8                             |
| character_set_filesystem | binary                           |
| character_set_results    | utf8                             |
| character_set_server     | utf8                             |
| character_set_system     | utf8                             |
| character_sets_dir       | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+
8 rows in set (0.00 sec)
//#改动已经生效。

 

未完,待续。。。。

参考文档:

http://www.cnblogs.com/fly1988happy/archive/2011/11/21/2257682.html

http://hi.baidu.com/edeed/item/eb40f529f35b2484af48f5b6

posted @ 2013-05-21 20:38 爱自己 阅读(...) 评论(...) 编辑 收藏