LNMP开发

[LNMP]Mysql生产环境配置

2016-02-21  本文已影响988人  tumg的LNMP_IOS小集

基础环境


centos 6.x
mysql-community-server5.6 或以上

安装&启动


配置mysql官方yum源

详见:[LNMP]Linux的Web服务基础配置

安装server、client

<pre>
yum install mysql-community-server mysql-community-client mysql-community-devel
</pre>

创建数据库目录:(根据需要,对应目录在my.cnf 中修改)

<pre>
mkdir -p /data/db/mysql/
mkdir -p /var/log/mysql/
</pre>

启动初始化,改好配置后再重启:

<pre>
service mysqld start
chkconfig mysqld on
</pre>

角色定位


常用是“1主多从”的架构:有1台主服务,n台从服务,配置方式详见《主从设置章节》。

公共配置


由于配置较多,以下只列出生产环境需要配置的部分(检查以下配置),文件路径:/etc/my.cnf

<pre>
[mysql]
port = 3306
socket=/data/db/mysql/mysql.sock
default-character-set=utf8

[mysqld]
port = 3306
user = mysql
socket=/data/db/mysql/mysql.sock
datadir=/data/db/mysql/
character-set-server= utf8

全局配置

skip-name-resolve
back_log = 512
table_open_cache =2048
query_cache_size =0
tmp_table_size =32M
max_heap_table_size= 32M
sort_buffer_size =2M
join_buffer_size =2M
read_buffer_size =2M
read_rnd_buffer_size= 2M
symbolic-links=0
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

连接相关配置

connect_timeout =10
interactive_timeout= 60
wait_timeout = 60
max_connections =1000 #根据实际情况调整
max_connect_errors= 1000

log设置

log_error =/var/log/mysql/mysqld.log
slow_query_log =ON
slow_query_log_file= /var/log/mysql/slow.log
long_query_time =8

innodb 设置

innodb_file_per_table= ON
innodb_flush_log_at_trx_commit= 1
innodb_buffer_pool_size= 4G #专用DB数据库设置成 物理内存50%,非专用设置成 25%
innodb_data_file_path= ibdata1:1G:autoextend
innodb_log_buffer_size= 64M
innodb_log_file_size= 256M
innodb_log_files_in_group= 2
innodb_open_files= 2048

myisam 设置

key_buffer_size =8M

[mysqldump]
quick
socket=/data/db/mysql/mysql.sock
max_allowed_packet= 64M

[mysqld_safe]
log-error=/var/log/mysql/mysqld.log
pid-file=/var/run/mysql/mysqld.pid
</pre>

主机配置


放在 [mysqld] 里面

<pre>
server_id = 1 #若是在主从架构中,每台机都必须不一样
log_bin =mysql-bin.log
log_bin_index =mysql-bin.index
expire_logs_days =30
sync_binlog = 0
</pre>

从机配置

放在 [mysqld] 里面

<pre>
server_id = 2 #若是在主从架构中,每台机都必须不一样
log_bin =mysql-bin.log
log_bin_index =mysql-bin.index
expire_logs_days =30
sync_binlog = 0
</pre>

主从同步设置


  1. 根据上面的配置,分别配置好 主机和从机,并启动服务(参考前面);
  2. 在主机上,创建同步账户:
    <pre>
    mysql> grant replication slave,replication client on . to 'replUser'@'192.168.1.%' identified by 'replPw';
    </pre>
  3. 在主机上,锁表并导出数据:
    3-1 锁表
    <pre>
    mysql > flush tables with read lock;
    </pre> 3-2 导出数据
    <pre>
    mysqldump -u root test2 > db.sql
    </pre>3-3 在从机上导入db.sql 文件
  4. 在主机查询,主机状态:
    <pre>
    mysql >SHOW MASTER STATUS;
    </pre>
  5. 在从机上,设置同步点:
    <pre>
    mysql > CHANGE MASTER TOMASTER_HOST='192.168.115.120',MASTER_USER='replUser',MASTER_PASSWORD='replPw',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=120;
    </pre>
  6. 在主机上,关闭锁表:
    <pre>
    mysql > UNLOCK TABLES;
    </pre>
  7. 在从机上,开启同步并查询状态:
    <pre>
    mysql > start slave;
    mysql > show slave status\G;
    </pre>
  8. 查看Slave_IO_Running、Slave_SQL_Running 为 YES,即同步成功

日常维护命令


<pre>

  1. showprocesslist/show full processlist; 查看MySQL进程任务命令,其中带full参数的,则显示完整语句信息。
  2. show masterstatus\G; 查看主机的二进制日志信息
  3. show slavestatus\G; 查看从机同步状态的详细信息。如果主从同步出现错误,则有详细的错误信息提示。
  4. showdatabases; 列出MySQL中的所有数据库
  5. showtables; 列出指定数据库中的所有数据表
  6. show createtable A; 查看创建数据表A的sql语句
  7. desc A; 查看数据表 A 字段结构信息
    </pre>

主从异常维护


Mysql主从一致性检查与修复

utf8mb4字符集


<pre>
1.MySQL中的utf-8并不是真正意义上的utf-8,它只能存储1~3个字节长度的utf-8编码,而存储4个字节的必须用utf8mb4(mysql>=5.5.3支持),否则会出现乱码。例如在微信管理系统中,消息文本使用了emoji表情:符号,必须使用utf8mb4进行储存。
2.注意最大字符长度:以INNODB为基础,utf8最长VARCHAR(255),utf8mb4最长为VARCHAR(191)。
3.如果使用PHP来操作到 MySQL,字符串仍可能面临在数据库中以非 UTF-8 的格式进行存储的问题。
4.为了字符串从 PHP 到 MySQL都使用 UTF-8,确认数据表都设定为 utf8mb4 字符集和整理,并且确保 PDO 连接请求也使用了 utf8mb4 字符集,这是非常重要的。要求在的mysql>=5.5.3版本,表、字段必须使用utf8mb4字符集和utf8mb4整理。
utf8参考资料
</pre>

上一篇 下一篇

猜你喜欢

热点阅读