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)先安装cmake(mysql5.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)修改MySQL的root用户的密码以及打开远程连接
[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默认安装的最大连接数是100。100一般是不够用的。要增大连接数,要怎样增加呢?
[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演示)。
[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