安装部署mysql主从复制环境
实验环境:centos7
实验机器:2台
主数据库:11.11.11.24
从数据库:11.11.11.26
主从复制的准备操作
安装部署两台或多台mysql数据库
yum -y install mariadb mariadb-server
关闭防火墙和selinux
systemctl stop firewalld.service #关闭防火墙 setenforce 0 #临时关闭selinux
查看mysql的版本信息
[root@localhost ~]# mysql -V
mysql Ver 15.1 Distrib 5.5.65-MariaDB, for Linux (x86_64) using readline 5.1
启动mysql服务,查看系统中是否存在mysql进程,并查看mysql的端口号
[root@localhost ~]# systemctl start mariadb.service
[root@localhost ~]# ss -anp |grep mysql u_str LISTEN 0 50 /var/lib/mysql/mysql.sock 44299 * 0 users:(("mysqld",pid=3112,fd=15)) tcp LISTEN 0 50 *:3306 *:* users:(("mysqld",pid=3112,fd=14))
#ss命令可以用来获取socket统计信息,能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效
修改mysql配置文件
# 以下操作在主服务器上
修改配置mysql的主配置文件 (主数据库)
1.mysql主配置文件路径
vim /etc/my.cnf
2.配置文件内添加以下内容
server-id=1 # 主数据库id为1 主从值不得相同 log_bin=mysql-bin # 开启二进制日志 :wq #保存退出
3.重启mysql服务
[root@localhost ~]# systemctl restart mariadb.service
查看mysql二进制日志信息
# 进入mysql
mysql -uroot # 原始情况下mysql中root默认的密码为空
执行的命令; show master status; 在mysql中新建数据库; create database name; 在mysql中新建用户并授权 grant all on *.* to 'sjl'@'%' identified by '123';
解释: 在master的数据库服务器中建立一个复制的账户,每个slave使用该账户链接master来进行复制,设置所有权限(根据具体情况自定)。
上面创建了一个sjl用户,密码是123。只允许在所有段的ip地址的登录。
修改配置mysql的主配置文件 (从数据库)
1. mysql主配置文件路径
vim /etc/my.cnf
2.配置文件内添加以下内容
server-id=2 # 主数据库id为1 主从值不得相同 relay_log=relay-logs # 开启中继日志,可以自定义目录,mysql用户有权限即可 :wq #保存退出
3.重启mysql服务
[root@localhost ~]# systemctl restart mariadb.service
# 以下内容在数据库内操作
查看中继日志的启动状态
show global variables like '%relay%';
连接master服务器
MariaDB [(none)]> change master to -> master_host='11.11.11.24', -> master_user='sjl', -> master_password='123', -> master_log_file='mysql-bin.000001', -> master_log_pos=245;
选项解释:
master_host:master 服务器IP
master_user:master 服务器授权用户,也就是 Master 前面创建的那个用户
master_password:master 服务器授权用户对应的密码
master_log_file:master binlog 文件名
master_log_pos:master binlog 文件中的 Postion 值
手动启动复制线程:
start slave;
mysql主从效果图
MariaDB [(none)]> show slave status G; *************************** 1. row *************************** Slave_IO_State: Connecting to master Master_Host: 11.11.11.24 Master_User: sjl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 245 Relay_Log_File: relay-logs.000001 Relay_Log_Pos: 4 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes
两个进程都是Yes,为主从复制成功
主从服务检测脚本
前期准备工作
安装邮件报警命令 mail
yum -y install mailx
配置
vi /etc/mail.rc 在文件尾加上如下配置
set from=*****@163.com # 用那个邮箱发送 set smtp=smtp.163.com set smtp-auth-user=*****@163.com set smtp-auth-password=**** # 不是邮箱密码,是授权码 set smtp-auth=login
测试
[root@localhost ~]# echo "MySQL"|mail -s mysql ****0@qq.com
内容 | mail -s 标题 接收邮箱
shell脚本
#!/bin/bash # 数据库登录 mysql="mysql -uroot -p1234" while true do # 检测关键字 array=($($mysql -e "show slave statusG"|egrep '_Running:|Behind_Master|Last_SQL_Errno'|awk '{ print $NF }')) # 判断关键字 if [ "${array[0]}" == "Yes" -a "${array[1]}" == "Yes" -a "${array[2]}" == "0" ] then # 运行正常的输出 echo "MySQL 主从正常" else # 运行失败,发送报警信息 echo "MySQL 主从服务 报错 管理员及时处理"|mail -s mysql ******@qq.com break fi sleep 10 done
测试脚本运行效果