本文以CentOS 7安装MySQL 5.7为例,介绍在Linux操作系统下,使用tar.gz格式的安装包安装部署MySQL数据库的过程,包含单机部署方法和主从集群的搭建方法。
以下是单机安装过程
[root@localhost] # groupadd mysql
[root@localhost] # useradd -g mysql mysql
将MySQL主程序解压至mysql用户目录下,并重命名目录
[root@localhost] # tar -zxvf mysql-5.7.xxxxxxxxxx.tar.gz -C /home/mysql/
[root@localhost] # mv /home/mysql/mysql-5.7.xxxxxxxxxx mysql-5.7
[root@localhost] # mkdir -p /home/mysql/datadir
[root@localhost] # mkdir -p /home/mysql/logs/mariadb
此处创建的目录将用于存放MySQL数据库的数据文件和二进制日志(binary log)。
为方便数据容量管理和数据迁移等,可使用LVM等工具为数据目录和日志目录建立专用的文件系统 。
[mysqld]
server-id=1
socket=/home/mysql/mysql.sock
character-set-server=utf8
datadir=/home/mysql/data
log_bin=/home/mysql/logs/mysql-bin
expire_logs_days=10
lower_case_table_names=1
...
其中,character-set-server 指定创建新的schema时默认使用的字符集;
log_bin 参数表示开启二进制日志并指明二进制日志文件的位置和文件名;
expire_logs_days 参数表示过期天数;
lower_case_table_names=1 表示数据库中表名使用小写,即忽略表名的大小写。
[client]
socket=/home/mysql/mysql.sock
更多可配置的参数可参阅MySQL参考手册。
编辑安装目录下support-files/mysql.server
[root@localhost] # cd /home/mysql/mysql-5.7/
[root@localhost] # vi support-files/mysql.server
修改其中basedir和datadir项
basedir=/home/mysql/mysql-5.7
datadir=/home/mysql/data
将文件复制到/etc/init.d/
[root@localhost] # cp support-files/mysql.server /etc/init.d/mysql
# chown -R mysql:mysql /home/mysql
# chown mysql:mysql /etc/my.cnf
# chown mysql:mysql /etc/init.d/mysql
修改以上目录和文件属主为mysql:mysql,使MySQL服务能使用操作系统的mysql用户启动。
编辑/etc/profile,在文件末尾添加如下内容:
MYSQL_HOME=/home/mysql/mysql-5.7
export PATH=$PATH:$MYSQL_HOME/bin
使环境变量生效
[root@localhost] # source /etc/profile
由root切换至mysql用户使用mysql用户初始化MySQL系统,执行mysqld --initialize初始化数据库
[root@localhost] # su - mysql
[mysql@localhost] $ mysqld --initialize --user=mysql --basedir=/home/mysql/mysql-5.7 --datadir=/home/mysql/data
完成操作后,MySQL会返回一个root用户的随机密码,把它记住,稍后用于修改密码。
[mysql@localhostt] $ service mysql start
[mysql@localhostt] $ mysqladmin -u root -p password PASSWORD
命令中 PASSWORD 为用户设置的新密码。
执行命令,根据提示输入初始化时生成的随机密码后,root用户密码修改完成。
注意: 执行该命令前应先确保mysql服务已成功启动。
至此,MySQL单机部署完成。
以下开始主从配置
在从机修改/etc/my.cnf
[mysql@localhost] $ vi /etc/my.cnf
[mysqld]
server-id=2
集群中每个MySQL实例都应设置不同 server-id 。
若主机 server-id 设置为1,从机中应将其设置为2(不与主机即可)。
若有多个从机,应将 server-id 设置为3,4,5… …
[mysql@localhost] $ vi /etc/my.cnf
[mysqld]
binlog_format=mixed
二进制日志的格式有三种:statement、row、mixed。
三种二进制日志格式的区别可以简单描述为:
statement格式的日志以语句为单位记录,它占用空间小但不能记录如load等一类操作;
row格式以数据表的值为单位记录,同步时锁表锁记录较少,但占用空间大;
mixed将结合两者的优缺点做了折中方案,即以较小的空间代价记录所有操作。
三者的具体的区别可参阅MySQL参考手册。
mysql> grant replication slave on *.* to 'slave'@'IpAddress' identified by 'Password';
mysql> show master status\G;
第一条语句是指在数据库中创建slave用户并赋予其复制的权限。
其中,IpAddress 表示从机的IP地址,Password 表示从机登录到主机时使用的密码。
若多个从机在同一网段如 192.168.101.0,那么 IpAddress处可写为 192.168.101.%
注意: 该步骤在主机上操作
根据主机日志状态,在从机配置同步信息
mysql> stop slave;
mysql> change master to
> master_host='IpAddress',
> master_user='slave',
> master_password='Password',
> master_log_file='mysql.000009',
> master_log_pos=922;
mysql> start slave;
同样,IpAddress 表示主机的IP地址,Password 表示登录到主机时使用的密码。
master_log_file 指主机当前的日志文件;
master_log_pos 指当前日志文件的位置;
所以两个字段的值应置为步骤4中查询到的 File 和 Position 字段的值。
注意: 该步骤在从机上操作
mysql> show slave status\G;
……
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
……
执行show slave status命令,应看到 Slave_IO_Running 和 Slave_SQL_Running 两个字段值为 Yes。
至此,MySQL主从复制配置完成。