基础环境
centos 6.x
mysql-community-server5.6 或以上
安装&启动
配置mysql官方yum源
安装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>
主从同步设置
- 根据上面的配置,分别配置好 主机和从机,并启动服务(参考前面);
- 在主机上,创建同步账户:
<pre>
mysql> grant replication slave,replication client on . to 'replUser'@'192.168.1.%' identified by 'replPw';
</pre> - 在主机上,锁表并导出数据:
3-1 锁表
<pre>
mysql > flush tables with read lock;
</pre> 3-2 导出数据
<pre>
mysqldump -u root test2 > db.sql
</pre>3-3 在从机上导入db.sql 文件 - 在主机查询,主机状态:
<pre>
mysql >SHOW MASTER STATUS;
</pre> - 在从机上,设置同步点:
<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> - 在主机上,关闭锁表:
<pre>
mysql > UNLOCK TABLES;
</pre> - 在从机上,开启同步并查询状态:
<pre>
mysql > start slave;
mysql > show slave status\G;
</pre> - 查看Slave_IO_Running、Slave_SQL_Running 为 YES,即同步成功
日常维护命令
<pre>
- showprocesslist/show full processlist; 查看MySQL进程任务命令,其中带full参数的,则显示完整语句信息。
- show masterstatus\G; 查看主机的二进制日志信息
- show slavestatus\G; 查看从机同步状态的详细信息。如果主从同步出现错误,则有详细的错误信息提示。
- showdatabases; 列出MySQL中的所有数据库
- showtables; 列出指定数据库中的所有数据表
- show createtable A; 查看创建数据表A的sql语句
- desc A; 查看数据表 A 字段结构信息
</pre>
主从异常维护
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>