• 网络:
    内部网络:172.16.1.0/24(仅主机模式);
    外部网络:192.168.1.0/24(桥接模式);
  • 服务器:
    2 台 VMware Workstation 虚拟机(node103、node104);
    安装 CentOS 7.2(已经过系统初始化操作);
    yum 安装 MariaDB;
  • 实验环境基础服务:
    外网 DNS & NTP:192.168.1.250;
    内网 DNS & NTP:172.16.1.250;

2.1:安装 MariaDB

  • 两台服务器均使用 yum 安装 mariadb-server:
]# yum install mariadb-server -y

2.2:配置 MariaDB

  • 备份配置文件:
]# cp /etc/my.cnf{,.bak}

2.2.1:node103 配置

  • 编辑 /etc/my.cnf:
[root@node103 ~]# vim /etc/my.cnf               
[mysqld]
bind-address=172.16.1.103
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0
datadir=/data/mysql
max_connections=1024

innodb_file_per_table=1
innodb_buffer_pool_size=536870912
innodb_log_group_home_dir=/data/mysql_logs/
innodb_log_file_size=10485760

long_query_time=5
slow_query_log=1
slow_query_log_file=/data/mysql_logs/mysql-slow.log

server-id=103
log-bin=/data/mysql_logs/mysql-binlog
relay-log=/data/mysql_logs/mysql-relay

[mysqld_safe]
log-error=/data/mysql_logs/mysql-error.log
pid-file=/var/run/mariadb/mariadb.pid

!includedir /etc/my.cnf.d

2.2.2:node104 配置

  • 编辑 /etc/my.cnf:
[root@node104 ~]# vim /etc/my.cnf
[mysqld]
bind-address=172.16.1.104
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0
datadir=/data/mysql
max_connections=1024

innodb_file_per_table=1
innodb_buffer_pool_size=536870912
innodb_log_group_home_dir=/data/mysql_logs/
innodb_log_file_size=10485760

long_query_time=5
slow_query_log=1
slow_query_log_file=/data/mysql_logs/mysql-slow.log

server-id=104
log-bin=/data/mysql_logs/mysql-binlog
relay-log=/data/mysql_logs/mysql-relay

[mysqld_safe]
log-error=/data/mysql_logs/mysql-error.log
pid-file=/var/run/mariadb/mariadb.pid

!includedir /etc/my.cnf.d

2.3:my.cnf 配置说明

2.3.1:MySQL 程序相关配置
  • bind-address=172.16.1.104
    指定 mysql 监听地址;

数据调用只使用内网环境,所以 mysql 只监听内网地址;

  • socket=/var/lib/mysql/mysql.sock
    指定 scoket 文件,保持默认;
  • user=mysql
    指定 mysql 程序的启动用户;

默认应该也是 mysql 用户;

  • symbolic-links=0
    禁用软链接;

MySQL 建议禁用此项,以抵御安全风险;
相比于禁用此项,开启软链接可以将数据文件移动至别处,在数据目录中创建相应的软链接来指向真实数据文件;

  • datadir=/data/mysql
    自定义数据文件存放目录;
  • max_connections=1024
    设置 MySQL 的最大并发连接数;

该选项默认值为 151;
MySQL 不是直接面向用户的,而是面向程序,所以无需过大;

2.3.2:InnoDB 相关配置
  • innodb_file_per_table=1
    使用单独表空间;

即每张表的数据和索引都存储于自己专用的表空间文件中;
InnoDB 的很多高级特性都依赖于此参数,建议设定为 ON;

  • innodb_buffer_pool_size=536870912
    InnoDB 的内存缓冲区大小;

如果是数据库专用服务器,该值尽量设得大一些;
虚拟机内存分配为 1G,这里分配给缓冲区的大小为 512M;

  • innodb_log_group_home_dir=/data/mysql_logs/
    指定事务日志的保存路径;
  • innodb_log_file_size=10485760
    每个事务日志文件的大小;

默认 5M,这里调整为 10M;
对于事务频繁的数据库,该值建议调得再大些,有利于提高 IO 效率;
但也不宜过大,因为在需要恢复数据时,会延长数据恢复时间;

2.3.3:慢日志相关配置
  • long_query_time=5
    慢查询时长定义(即多长时间的查询会被认为是 “慢查询”);

默认就是 5s;
根据业务查询复杂程度和慢日志实际记录情况合理调整;

  • slow_query_log=1
    开启记录慢日志;
  • slow_query_log_file=/data/mysql_logs/mysql-slow.log
    指定慢日志文件保存路径;
2.3.4:MySQL 复制相关配置
  • server-id=103
    定义 MySQL 服务器 ID,每个节点保证不同;
  • log-bin=/data/mysql_logs/mysql-binlog
    开启二进制日志记录,并指定二进制日志文件保存路径;

主从复制架构中,从节点需要关闭二进制日志;

  • relay-log=/data/mysql_logs/mysql-relay
    开启中继日志,并指定中继日志文件保存路径;

主从复制架构中,主节点不需要开启中继日志;

2.3.5:mysqld_safe
  • log-error=/data/mysql_logs/mysql-error.log
    开启错误日志记录,并指定错误日志保存路径;
  • pid-file=/var/run/mariadb/mariadb.pid
    指定 pid 文件路径;

2.4:启动 mariadb

  • 创建相应目录:
]# mkdir /data/{mysql,mysql_logs} -pv
]# chown mysql:mysql /data/mysql* -R
  • 启动 mariadb 并设置为开机启动:
]# systemctl enable mariadb
]# systemctl start mariadb
  • 初始化安全配置:
]# mysql_secure_installation