mysql主从复制实践之单数据库多实例

1.主从复制数据库实战环境准备

MySQL主从复制实践对环境的要求比较简单,可以是单机单数据库多实例的环境,也可以是两台服务器之间,每台服务器都部署一个独立的数据库的环境。本文以单机数据库多实例的环境进行实践。

2.主从复制服务器角色定义

序号 数据库角色 数据库IP信息 数据库port信息 数据库配置路径
1 master 192.168.1.20 3306 /data/3306
2 slave1 192.168.1.20 3307 /data/3307
3 slave2 192.168.1.20 3308 /data/3308

[[email protected] bin]# netstat -lntp | grep 330

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      24215/mysqld

tcp        0      0 0.0.0.0:3307                0.0.0.0:*                   LISTEN      24521/mysqld

tcp        0      0 0.0.0.0:3308                0.0.0.0:*                   LISTEN      24806/mysqld

3.在主库master上执行如下配置操作
3.1.设置server-id值并开启binlog功能参数

由MySQL主从复制原理我们知道,要实现主从复制,关键是要开启binlog日志功能,所以,要打开主库的binlog日志参数。

3.1.1修改主库的配置文件/data/3306/my.cnf,执行vim /data/3306/my.cnf,按如下内容修改参数:

[mysqld]

server-id = 1                        #用于同步的实例server-id 都不能相同

log-bin = /data/3306/mysql-bin             #开启binlog日志功能

3.1.2检查修改后的参数:

[[email protected] mysql]# grep -E "server-id|log-bin" /data/3306/my.cnf

log-bin = /data/3306/mysql-bin

server-id = 1

3.1.3重启主库mysql服务

[[email protected] mysql]# /data/3306/mysql restart

3.1.4登录数据库,检查参数修改情况:

mysql> show variables like ‘server_id‘;

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id     | 1     |

+---------------+-------+

1 row in set (0.00 sec)

mysql> show variables like ‘log_bin‘;

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| log_bin       | ON    |

+---------------+-------+

1 row in set (0.00 sec)

经检测,主库的binlog功能以及开启;

3.2在主库上建立用于主从复制的账号

由主从复制的原理可知,从库要和主库同步,需有一个可以连接主库的账号,并且这个账号是在主库上建立的,权限允许从库连接主库并同步数据。

3.2.1在主库创建账号rep,具体操作如下:

mysql -uroot -p -S /data/3306/mysql.sock         #登录数据库;

mysql> grant replication slave on *.* to ‘rep‘@‘192.168.1.%‘ identified by ‘lb123456‘;  #创建rep账号;

3.2.2检查账号创建情况

mysql> use mysql;

mysql> select user,host from user where user=‘rep‘;

+------+-------------+

| user | host        |

+------+-------------+

| rep  | 192.168.1.% |

+------+-------------+

1 row in set (0.00 sec)

3.3在主库上锁表全备数据库,查看并记录主库状态信息;

3.3.1对主数据库进行锁表操作;

mysql> flush tables with read lock;

Query OK, 0 rows affected (0.01 sec)

3.3.2锁表后查看主库状态

mysql> show master status;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000004 |      259 |              |                  |

+------------------+----------+--------------+------------------+

1 row in set (0.00 sec)

注意:需记录该命令显示的信息,后续从库需用到此信息;

3.3.3对主库数据进行全备,具体操作如下:

[[email protected] /]# mkdir -p /server/backup

[[email protected] /]# mysqldump -uroot -S /data/3306/mysql.sock  --events -A -B | gzip > /server/backup/mysql_bak_$(date +%F).sql.gz

[[email protected] /]# cd /server/backup

[[email protected] backup]# ll

total 144

-rw-r--r--. 1 root root 144803 Jun 14 14:59 mysql_bak_2016-06-14.sql.gz

3.3.4再次查看主库状态信息,确保数据导出期间,数据库没有数据变更;

[[email protected] backup]# mysql -uroot -S /data/3306/mysql.sock -e "show master status";

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000004 |      259 |              |                  |

+------------------+----------+--------------+------------------+

注意:binlog文件及位置点如果前后一致,即没有变化,则说明主库数据库在锁表导出数据前后数据库没有数据变更;

3.3.5解锁主库,恢复可写;

mysql> unlock tables;

Query OK, 0 rows affected (0.00 sec)

4.在从库slave1上执行如下配置操作

4.1.设置server-id值并关闭binlog功能参数

这里从库的server-id要和主库及其他从库的不同,并且注释从库的binlog参数配置

4.1.1修改主库的配置文件/data/3307/my.cnf,执行vim /data/3307/my.cnf,按如下内容修改参数:

[mysqld]

server-id = 2                        #用于同步的实例server-id 都不能相同

#log-bin = /data/3306/mysql-bin             #关闭binlog日志功能

4.1.2检查修改后的参数:

[[email protected] backup]# grep -E "server-id|log-bin" /data/3307/my.cnf

#log-bin = /data/3307/mysql-bin

server-id = 2

4.1.3重启主库mysql服务

[[email protected] mysql]# /data/3307/mysql restart

4.1.4登录数据库,检查参数修改情况:

mysql> show variables like ‘server_id‘;

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id     | 2     |

+---------------+-------+

1 row in set (0.00 sec)

mysql> show variables like ‘log_bin‘;

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| log_bin       | OFF   |

+---------------+-------+

1 row in set (0.00 sec)

4.2把主库导出的数据恢复到从库slave1上;

[[email protected] /]# cd /server/backup/        #进入备份目录;

[[email protected] backup]# ll

total 144

-rw-r--r--. 1 root root 144803 Jun 14 14:59 mysql_bak_2016-06-14.sql.gz

[[email protected] backup]# gzip -d mysql_bak_2016-06-14.sql.gz      #解压备份数据库数据

[[email protected] backup]# ll

total 516

-rw-r--r--. 1 root root 527436 Jun 14 14:59 mysql_bak_2016-06-14.sql

[[email protected] backup]# mysql -uroot -S /data/3307/mysql.sock < mysql_bak_2016-06-14.sql #恢复slave1数据;

4.3登录从库slave1,配置复制参数

mysql> change master to

-> master_host=‘192.168.1.20‘,

-> master_port=3306,

-> master_user=‘rep‘,

-> master_password=‘lb123456‘,

-> master_log_file=‘mysql-bin.000004‘,

-> master_log_pos=259;

Query OK, 0 rows affected (0.16 sec)

4.4启动从库同步开关,查看复制状态

mysql> start slave;

Query OK, 0 rows affected (0.04 sec)

主从复制是否成功,最关键为下面3项参数:

[[email protected] backup]# mysql -uroot -S /data/3307/mysql.sock -e "show slave status\G" | grep -E "IO_Running|SQL_Running|Seconds_Behind_Master"

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Seconds_Behind_Master: 0

4.5测试主从复制结果

在主库创建新的数据库,然后观察从库的数据状况。

[[email protected] backup]# mysql -uroot -S /data/3306/mysql.sock -e "create database langyabang";   #在主库上创建新的数据库‘langyabang’;

[[email protected] backup]# mysql -uroot -S /data/3306/mysql.sock -e "show databases like ‘langyabang‘";

+-----------------------+

| Database (langyabang) |

+-----------------------+

| langyabang            |

+-----------------------+

#在主库上查看数据库‘langyabang’创建情况;

[[email protected] backup]# mysql -uroot -S /data/3307/mysql.sock -e "show databases like ‘langyabang‘";

+-----------------------+

| Database (langyabang) |

+-----------------------+

| langyabang            |

+-----------------------+

#在从库上查看主从复制情况;

根据测试主从是同步的。

时间: 2024-07-30 13:44:44

mysql主从复制实践之单数据库多实例的相关文章

MySQL主从复制实践与部署

本文主要介绍在单机单数据库多实例的环境下,实现MySQL主从复制功能 基本流程: 1.MySQL主从复制介绍 2.主从复制数据库实战环境准备 3.在主库Master上执行操作配置 4.在MySQL从库上执行的操作过程 5.启动从库同步开关,测试主动复制配置情况 6.MySQL主从复制配置步骤总结 流程一:MySQL主从复制介绍 Mysql数据库的主从复制方案,与使用scp/rsync等命令进行的文件级别复制类似,都是数据的远程传输,只不过Mysql的主从复制是其自带的功能,无需借助第三方工具,而

利用XtraBackup和MySQL主从复制来转移Zabbix数据库

一 应用场景描述 目前Zabbix监控系统的Server端和Web端以及MySQL运行在同一台虚拟机上,最近这台虚拟机运行不是很稳定,MySQL频繁被OOM杀掉.故需要及时迁移Zabbix数据库到另外一台大内存的物理机. 二 迁移步骤 迁移的思路是搭建MySQL主从复制,把现有的MySQL实例作为Master,把新的MySQL实例作为Slave,现DUMP一份现有的数据迁移到新的MySQL实例,然后设置主从同步,最后再关闭主从同步. 这里我们使用XtraBackup来备份Master的数据,而不

单服务器MySQL主从复制实践

一.先配置好两个MySQL实例并可以正常启动 1. 首先在Linux上先安装好MySQL数据库,此处省略详细的安装步骤(可以使用yum安装) yum -y install mysqld mysql 2. 在/usr/local目录下新建目录mysqls/mysql1, mysqls/mysql2 分别作为我们的主数据和从数据库目录,新建mysqls/run作为MySQL PID存放目录,新建mysqls/log作为MySQL日志目录 mkdir -p /usr/local/mysqls/mysq

mysql 主从复制 实践

异步主从复制   主从部署步骤: 备份还原 使用mysqldump或者xtrabackup 把主库现有基础数据还原到从库 授权 grant replication slave on *.* 给从库一个复制binlog的账号 配置复制,并启动 从库上配置复制信息,并指向master 查看主从复制信息 show slave status \G 1)备份还原 主:101 从:100 a)主库备份 [email protected]untu:~$ mysqldump -uroot -p --socket

MySQL主从复制介绍

1.1 MySQL主从复制原理介绍 MySQL的主从复制是一个异步的复制过程(虽然一般情况下感觉是实时的),数据将从一个MySQL数据库(我们称之为Master)复制到另一个MySQL数据库(我们称之为Slave),在Master与Slave之间实现整个主从复制的过程是由三个线程参与完成的,其中有两个线程(SQL线程和IO线程)在Slave端,另外一个线程(I/O线程)在Master端. 要实现MySQL的主从复制,首先必须打开Master端的binlog记录功能,否则就无法实现.因为整个复制过

重新学习Mysql数据13:Mysql主从复制,读写分离,分表分库策略与实践

一.MySQL扩展具体的实现方式 随着业务规模的不断扩大,需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量. 关于数据库的扩展主要包括:业务拆分.主从复制.读写分离.数据库分库与分表等.这篇文章主要讲述数据库分库与分表 (1)业务拆分 在?大型网站应用之海量数据和高并发解决方案总结一二?一篇文章中也具体讲述了为什么要对业务进行拆分. 业务起步初始,为了加快应用上线和快速迭代,很多应用都采用集中式的架构.随着业务系统的扩大,系统变得越来越复杂,越来越难以维护,开发效率变得越

MySQL数据库多实例主从同步

本文主要介绍单台服务器MySQL数据库多实例的主从同步,一般常规做主从复制主从服务器在不同的机器上,并且监听端口均为默认的3306端口.一.环境介绍 操作系统:CentOS 6.5 数据库版本:MySQL 5.5.32 主库主机名称:mysql-master(172.18.10.222:3306) 从库主机名称:mysql-slave(172.18.10.222:3307) 二.主从同步原理介绍  简单描述主从复制原理: 1.在Slave服务器命令行执行start slave,开启主从复制开关

MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 转载

http://heylinux.com/archives/1004.html MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中,由单台Mysql作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面. 因此,一般来说都是通过 主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy

MySQL主从复制原理和实践

mysql主从复制 mysql支持单向 双向 链式级联 实时 异步复制,在复制过程中,一台服务器充当主服务器(Master),而一个或多个其他服务器充当从服务器(Slave) mysql主从复制的应用场景 1.主从服务器互为备份 2.主从服务器读写分离分担网站压力 读写分离 中大型公司:通过程序(php,java) 测试环境:代理软件(mysql-proxy,amoeba) 门户网站:分布式dbproxy(读写分离,hash负载均衡,健康检查) 主从同步实践操作(多实例环境) 1.主库上面设置s