【运维技术】数据库主从同步搭建

数据库主从同步搭建

MYSQL主从同步是目前使用比较广泛的数据库架构,技术比较成熟,配置也不复杂,特别是对于负载比较大的网站,主从同步能够有效缓解数据库读写的压力。

MySQL主从同步的机制

MYSQL主从同步是在MySQL主从复制(Master-Slave Replication)基础上实现的,通过设置在Master MySQL上的binlog(使其处于打开状态),Slave MySQL上通过一个I/O线程从Master MySQL上读取binlog,然后传输到Slave MySQL的中继日志中,然后Slave MySQL的SQL线程从中继日志中读取中继日志,然后应用到Slave MySQL的数据库中。这样实现了主从数据同步功能。

MySQL主从同步的作用

1、可以作为一种备份机制,相当于热备份
2、可以用来做读写分离,均衡数据库负载

MySQL主从同步的步骤

# 主要步骤:
1. 安装主数据库
2. 修改root账号密码,root账号远程登录
3. 安装从数据库
4. 修改root账号密码,root账号远程登录,密码和主数据库密码相同 
5. 主数据库修改配置,添加server-id,添加bin-log文件
6. 主数据库创建同步账号,指定内网ip可以访问,设定同步密码,使用从数据库连接主数据库测试连通性
7. 主数据库刷新表,锁住所有的表,查看master状态,记录bin-log文件和当前的定位编号
8. 使用mysqladmin备份数据库,没有数据可以忽略这一步,数据量大的情况下使用mysqldump来备份数据
9. 从数据库服务器配置server-id,将备份数据导入从服务器。开启binlog等配置
10. 从数据库修改配置,添加同步账户信息以及bin-log文件和当前的定位编号
11. 开启同步,主数据库接触锁定。

实际操作

1. 安装主数据库

2. 修改root账号密码,root账号远程登录

3. 安装从数据库

4. 修改root账号密码,root账号远程登录,密码和主数据库密码相同

1、2、3、4:单机安装mysql教程

cd /app
mkdir mysql
cd mysql
# 下载mysql的包,可以使用服务器下载,也可以本地下载,上传到服务器上去
wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.21-1.el7.x86_64.rpm-bundle.tar
tar -xvf mysql-5.7.21-1.el7.x86_64.rpm-bundle.tar
# 查看冲突版本软件
rpm -qa | grep redhat-lsb-core
rpm -qa | grep postfix
rpm -qa | grep mariadb
# 卸载冲突版本软件
rpm -ev redhat-lsb-core-4.1-27.el7.centos.1.x86_64
rpm -ev postfix-2.10.1-6.el7.x86_64
rpm -ev mariadb-libs-5.5.56-2.el7.x86_64
# 安装依赖
yum install -y net-tools
yum install -y libaio
# 安装rpm,一定要按照顺序安装,遇到问题一定要查询问题,不可直接继续安装
rpm -ivh mysql-community-common-5.7.21-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.21-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.21-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.21-1.el7.x86_64.rpm
# 启动mysql
systemctl start mysqld
# 查看初始用户密码
grep password /var/log/mysqld.log
# 使用mysql账户登录,修改初始化密码
mysql -p
# 输入查看的密码
set password = password("Yingtong@2018!");
# 允许root用户远程连接
grant all privileges on *.* to root@'%' identified by 'Yingtong@2018!'; 
flush privileges;
# 修改区分大小写的配置
vim /etc/my.cnf
# 底部加入配置
lower_case_table_names=1
# 重新启动mysql
systemctl restart mysqld
# 使用客户端工具连接服务器

5. 主数据库修改配置,添加server-id,添加bin-log文件

# 编辑,并使用:wq保存
vim /etc/my.cnf
# 停止mysql
systemctl stop mysql
# 启动mysql
systemctl start mysql
# 如果启动遇到问题可有可以查看mysql启动日志,以及systemctl 启动日志
# mysql日志
tailf /var/log/mysqld.log
# 系统日志
journalctl -xe

配置:/etc/my.cnf配置修改内容(主数据库)

# 添加serverid,注意必须与从数据库不相同
server-id=2
# 开启mysql-bin日志,使用默认数据目录:/var/lib/mysql/,使用其他目录会有问题
log-bin=/var/lib/mysql/mysql-bin
# 开始mysql-replay-bin日志,使用默认数据目录
relay_log = /var/lib/mysql/relay-bin
# 不区分大小写,项目中有些库使用大写区分,所以服务器上添加这个设定
lower_case_table_names=1

6. 主数据库创建同步账号,指定内网ip可以访问,设定同步密码,使用从数据库连接主数据库测试连通性

主数据库:

# 登录主数据库服务器,输入密码进行登录
mysql -p
# 创建同步账号,ip地址为从数据库ip地址,密码自行定义
GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO repl@'172.16.48.131' IDENTIFIED BY 'Repl@2018!';
# 使用户生效
FLUSH PRIVILEGES;

从数据库:

# 使用mysql登录
mysql -urepl -h172.16.48.129 -pRepl@2018!
# 测试连接情况,成功连接上,说明创建的同步账号没有问题

7. 主数据库刷新表,锁住所有的表,查看master状态,记录bin-log文件和当前的定位编号

主数据库;

# 连接主数据库
mysql -p
# 锁定数据库
flush tables with read lock;
# 查询主数据库信息,记录bin-log文件和坐标
show master status;
| File             | Position |
+------------------+----------+
| mysql-bin.000007 |      154

8. 使用mysqladmin备份数据库,没有数据可以忽略这一步,数据量大的情况下使用mysqldump来备份数据

主数据库;

# 创建备份文件夹目录
mkdir -p /app/mysqlbackup/
# 备份出文件,数据量小的情况
mysqldump -uroot -p'Yingtong@2018!' -S /var/lib/mysql/mysql.sock --all-databases > /app/mysqlbackup/mysql_bak.$(date +%F).sql
# 备份出文件,数据量大的情况
mysqldump -uroot -p'Yingtong@2018!' -S /var/lib/mysql/mysql.sock --all-databases | gzip > /app/mysqlbackup/mysql_bak.$(date +%F).sql.gz
# 从数据库可以使用scp命令进行拷贝
scp -r root@172.16.48.129:/app/mysqlbackup/mysql_bak.2018-10-21.sql /app/mysqlbackup/

9. 将备份数据导入从服务器。从数据库配置修改和添加,server-id,开启binlog等配置

导入数据库配置

# 将备份数据导入从服务器
mysql -uroot -p'Yingtong@2018!' -S /var/lib/mysql/mysql.sock < /app/mysqlbackup/mysql_bak.2018-10-21.sql
# 修改从服务器数据库配置
vim /etc/my.cnf
# 重新启动数据库
systemctl stop mysqld
systemctl start mysqld

配置:/etc/my.cnf配置修改内容(从数据库)

# 服务id
server-id=1
# 开启mysql-binlog日志
log_bin = /var/lib/mysql/mysql-bin
# 开始mysql-relay日志
relay_log = /var/lib/mysql/relay-bin
# 设定日志的格式化
binlog-format = row
# 设定从库的日志更新
log-slave-updates = true
# 设定只读
read_only = 1
# 设定数据库不区分大小写
lower_case_table_names = 1

10. 从数据库修改配置,添加同步账户信息以及bin-log文件和当前的定位编号

# 从数据库登录mysql
mysql -p
# 设定同步账号,输入前面步骤中的mysql的mysql-bin.000007,和坐标154
CHANGE MASTER TO
MASTER_HOST='172.16.48.129',
MASTER_USER='repl',
MASTER_PASSWORD='Repl@2018!',
MASTER_LOG_FILE='mysql-bin.000007',
MASTER_LOG_POS=154

# 开启同步
start slave;
# 查看同步状态:其中Slave_IO_Running: YES且Slave_SQL_Running: YES即为成功同步了
show slave status G

11. 主数据库接触锁定。

# 主数据库
mysql -p
# 解除锁定
unlock tables;

12. 其他操作

# 停止数据库同步
stop salve;
# 停止同步线程
STOP SLAVE IO_THREAD

参考网站

Mysql主从同步(复制)

原文地址:https://www.cnblogs.com/fly-piglet/p/9842448.html