mysql集群部署
一、软件准备
MySQL版本采用 5.6.35,通过 Oracle 官方网站下载
也可以直接从HTTP文件服务器上获取:
生产环境:
wget http://download.cloud.pub/mysql/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
二、安装MySQL
1环境准备
MySQL采用解压二进制安装包方式安装,两个节点采用一主一从的部署架构,MySQL
禁止运行在操作系统的root账户下。
操作系统环境:
用户:mysql
用户组:mysql
数据库环境:
Basedir : /usr/local/mysql
Datadir: /data
端口:3306
root用户:不启用远程登录
slave用户: 主从同步
pacloud用户:业务用户,用户可以自行定义
2安装主节点(Master)
Step 1.创建用户及用户组
以root用户登录,创建用户及用户组:
创建MySQL运行账户:
[root@aldb]# groupadd mysql
[root@aldb]# useradd–r –g mysql mysql
设置mysql用户密码
[root@aldb]# passwd mysql
创建MySQL DBA账户:
[root@aldb]# groupadd dba
[root@aldb]# useradd–r –g dba dba
设置dba用户密码
[root@aldb]# passwd dba
Step 2.创建数据库文件存储目录
[root@aldb]# mkdir /data
注:如果采用外部存储,则/data应该为挂载点。
设置权限
[root@aldb]# chown–R mysql:mysql /data
Step 3.解压 MySQL 安装包
[root@aldb]# cd /software
[root@aldb software]# tar–xzvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
[root@aldb software]# mv mysql-5.6.35-linux-glibc2.5-x86_64
/usr/local/mysql
设置权限
[root@aldb]# chown–R mysql:mysql /usr/local/mysql
Step 4.安装 MySQL
[root@aldb]# cd /usr/local/mysql/scripts/
[root@aldb scripts]#
./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data
注:如果提示如下:
error while loading shared libraries: libaio.so.1: cannot open shared object file:
No such file or directory
则需要安装libaio相关系统组件:
[root@aldb]# yum install libaio*
Step 5.配置文件
[root@aldb]# cd /usr/local/mysql/support-files/
[root@aldb support-files]# mv /etc/my.cnf f /etc/my.cnf.bak
[root@aldb support-files]# cp my-default.cnf /etc/my.cnf
[root@aldb support-files]# cp mysql.server /etc/init.d/mysql
[root@aldb]# vim /etc/init.d/mysql
添加以下两行:
basedir=/usr/local/mysql
datadir=/data
添加权限:
[root@aldb]# chown mysql:mysql /etc/init.d/mysql
[root@aldb]# chown mysql:mysql /etc/my.cnf
[root@aldb]# chmod 775 /etc/init.d/mysql
Step 6.修改 my.cnf
在[mysqld]下添加以下几行:
basedir = /usr/local/mysql
datadir = /data
innodb_buffer_pool_size = 5G
innodb_log_file_size = 4G
innodb_log_buffer_size = 10MB
max_connections = 16384
query_cache_size = 0
skip_name_resolve = off
auto_increment_offset = 2
auto_increment_increment = 20
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
Step 7.配置环境变量
[root@aldb]# vim /etc/profile
添加以下两行:
#Set MySQL Environment
export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin
[root@aldb]# source /etc/profile
Step 8.配置开机自动启动
[root@aldb]# chkconfig --add mysql
[root@aldb]# chkconfig mysql on
Step 9.启动数据库
[root@aldb]# su mysql
[mysql@aldb]$ service mysql start
Starting MySQL.. SUCCESS!
Step 10.设置数据库账户登录密码
[root@aldb]# cd /usr/local/mysql/bin/
[root@aldb bin]# ./mysqladmin–u root password ‘XXXXXXXX’
Step 11.登录数据库
[root@aldb]# mysql–u root –p
Step 12. iptables配置 3306 端口
[root@aldb]# service iptables save
[root@aldb]# vim /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
注:一定要加在-A INPUT -j REJECT --reject-with icmp-host-prohibited前面
重启iptables
[root@aldb]# service iptables restart
3安装从节点(Slave)
从节点安装步骤同主节点,目录结构全部相同。
配置从节点,启动从库只读:
[root@ECAM40124]# mysql–u root –p
mysql> set global read_only = 1
mysql> show global variables like '%read_only%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| innodb_read_only | OFF |
| read_only | ON |
| tx_read_only | OFF |
+------------------+-------+
3 rows in set (0.00 sec)
4主从配置
4.1主库配置
Step 1.停止主节点
[root@aldb]# su mysql
[mysql@aldb]$ service mysql stop
Step 2.修改主节点 my.cnf
[root@aldb]# vim /etc/my.cnf
[mysqld]
#启用二进制日志
log_bin = mysql-bin
server-id=77 #(通常使用当前服务器 IP 地址的第 4 段)
binlog_format=row
Step 3.启动数据库
[root@aldb]# su mysql
[mysql@aldb]$ service mysql start
Step 4.创建同步账号
[root@aldb]# mysql–uroot –pxxxxx –e “GRANT REPLICATION
SLAVE,RELOAD,SUPER ON *.* TO‘slave’@’100.68.2.78’ IDENTIFIED BY ‘XXXXX’; ”
查看主库状态:
mysql> flush privileges;
mysql> show master status;
注:记录下mysql-bin.xxxx文件名和位置,会在从节点上用到。
4.2从库配置
Step 1.停止从节点
[root@ECAM40124]# su mysql
[mysql@ECAM40124]$ service mysql stop
Step 2.修改主节点 my.cnf
[root@ECAM40124]# vim /etc/my.cnf
[mysqld]
#启用二进制日志
log_bin = mysql-bin
server-id=78 #(通常使用当前服务器 IP 地址的第 4 段)
binlog_format=row
Step 3.启动数据库
[root@ECAM40124]# su mysql
[mysql@ECAM40124]$ service mysql start
Step 4.配置连接主数据库
[root@ECAM40124]# mysql -uroot -pXXXXX -e "change master to
master_host='100.68.2.xxx',master_user='slave',master_password='XXXXX',master_l
og_file='mysql-bin.0000xxx',master_log_pos=xxx;"
注:
-pXXXXX表示从节点 MySQL 用户 root 的密码;
master_password='XXXXX'表示主节点中 MySQL 用户 slave 的密码;
master_log_file='mysql-bin.0000xxx'必须为主节点的 log_file 名称;
master_log_pos=xxx必须为主节点的位置编号;
Step 5.开始同步
[root@ECAM40124]# mysql–u root -p
mysql> start slave;
mysql> show slave status \G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
注,如果Slave_IO_Running: Connecting,则说明 slave 连不上 master,
或者pos错误,网络问题,查看 master 上的 iptables 中 3306 端口的配置。
5.健康性验证
Step 1.在主库创建 database
Step 2.在从库查看 database
Step 3.在主库创建表
Step 4.在从库查看表
Step 5.在主库 insert 数据
Step 6.在从库查看数据
Step 7.删除验证数据
主库:drop table t_test;
从库:show tables;
5创建应用账号
登录主库:
1.创建应用账号
CREATE USER 'pacloud'@'%' IDENTIFIED BY 'XXXXXXX';
GRANT ALL ON *.* TO 'pacloud'@'%' WITH GRANT OPTION;
flush privileges;
2.创建只读账号
CREATE USER 'readonly'@'%' IDENTIFIED BY 'XXXXXXX';
GRANT SELECT ON *.* TO 'readonly'@'%';
flush privileges;
3.创建备份账号
CREATE USER 'export'@'%' IDENTIFIED BY '#Cloud@Backup!';
GRANT SELECT, SHOW, LOCK TABLES, TRIGGER ON *.* TO 'export'@'%';
flush privileges;
4、检查从服务器复制功能状态:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.2.222 //主服务器地址
Master_User: mysync //授权帐户名,尽量避免使用root
Master_Port: 3306 //数据库端口,部分版本没有此行
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 600 //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos
Relay_Log_File: ddte-relay-bin.000003
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES
......
注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。
以上操作过程,主从服务器配置完成。