前言
mysql是目前主流的数据库系统,在linux下使用yum/apt安装mysql非常方便,且已经可以测试开发使用,但要放到生产环境下,就需要对mysql进行一些配置。本文以刚以yum/apt安装好的mysql为例,介绍如何配置才能应用于生产环境,主要作为个人备忘;因个人mysql的运维经验有限,所以如果有错误请不吝赐教。 ^_^
正文
为root用户设定密码
默认安装的mysql只有一个root用户,且root用户无需密码即可登录,且权限无限制。所以必须为root用户设定一个密码,方法是:
/usr/bin/mysqladmin -u root password 'root-password'这样root登录时就必须要求输入设定的密码了。
允许其他主机访问
使用yum/apt安装的mysql默认只允许localhost/127.0.0.1本地访问,如果mysql作为独立的数据库服务器,一定是要能被其他主机访问的,这是通过授权privileges来实现的。mysql官方提供的grant语法是:
GRANT
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
TO user_specification [, user_specification] ...
[REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]
[WITH with_option ...]
object_type:
TABLE
| FUNCTION
| PROCEDURE
priv_level:
*
| *.*
| db_name.*
| db_name.tbl_name
| tbl_name
| db_name.routine_name
user_specification:
user [IDENTIFIED BY [PASSWORD] 'password']
ssl_option:
SSL
| X509
| CIPHER 'cipher'
| ISSUER 'issuer'
| SUBJECT 'subject'
with_option:
GRANT OPTION
| MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count比如要允许192.168.0.10的root用户使用密码192168110来访问数据库中的test1 schema中的所有表,就需要输入:
GRANT all privileges on test1.* to root@'192.168.1.10' identified by '192168110';有时候如果允许192.168.0.10的root可以给其他用户授权,就要在后面加上
with grant option;如果要允许任意主机的root用户,只需要把192.168.1.10改为%;如果要限制schema中的某个表,只需要将 test1.* 改为 test1.table1 即可;如果对schema和table不做限制,则用 *.* 代替 test1.* 即可。
注:刚发现with_option竟然有 MAX_QUERIES_PER_HOUR这类的配额控制,原来是这么做的,牛叉!
修改字符集编码
默认安装的mysql的字符集都是latin1,登录到mysql后,输入命令:
show variables like "%char%";然后会显示
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+说明这些编码属性默认都是latin1。
这里需要解释每种编码属性的详细含义!
但是为了能适应中文,所以需要把mysql的字符集都改为utf8,修改方法是直接修改mysql的配置文件:/etc/my.cnf,在[mysqld]下加入两行:
default-character-set=utf8
init_connect='SET NAMES utf8'然后在[client]下(如果没有client则增加)新增一行:
default-character-set=utf8这样就全部ok鸟。
修改mysql数据存放目录 默认安装的mysql,会将存储的数据放在/var/lib/mysql下(可参见/etc/my.cnf下的);但有些时候,因为业务需要,linux安装后的磁盘会按照特定大小来分区,比如我机器上的磁盘分区是:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
9.5G 2.5G 6.6G 28% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/vda1 485M 58M 402M 13% /boot
/dev/vdb1 985G 200M 935G 1% /data绝大多数的磁盘空间都在/data分区下,这样就导致/var/lib/mysql这个分区没几个G的空间,存不了多少记录mysql就会报磁盘满的错误;所以必须将mysql的数据存放目录放在/data分区里。
一个简单的办法就是利用软链接:
首先要关闭mysql:service mysqld stop
然后依次调用mv /var/lib/mysql /data/mysqldatadir
ln -s /data/mysqldatadir /var/lib/mysql
其实第二步已经把数据库的数据目录挪走了,但是如果是使用root用户执行以上操作,会由于权限问题(mysql默认是使用mysql用户)导致mysql start不起来,所以这个时候最简单的就是:(够简单够粗暴!)chmod -R 777 /var/lib/mysql
这样就ok了,重启mysq即可,就不怕数据存一会儿磁盘就报不够了 ^_^
还有一些比如最大连接数、最大错误连接数等可以做性能优化,下次再介绍 ^_^