Mysql主从复制详解
MysqlMysql 主从复制详解主从复制详解 什么是主从复制什么是主从复制 主从复制是用来建立一个和主数据库完全一样的数据库环境, 称为从数 据库;主数据库一般是准实时的业务数据库。 主从复制的作用主从复制的作用 1、做数据的热备做数据的热备,作为后备数据库,主数据库服务器故障后,可切换 到从数据库继续工作,避免数据丢失避免数据丢失。 2、有利于架构的扩展有利于架构的扩展。业务量越来越大,I/O 访问频率过高,单机无 法满足,此时做多库的存储,降低磁盘I/O 访问的频率,提高单个机器提高单个机器 的的 I/OI/O 性能性能。 3、读写分离,使数据库能支撑更大的并发读写分离,使数据库能支撑更大的并发。在报表中尤其重要。由于 部分报表 sql 语句非常的慢,导致锁表,影响前台服务。如果前台使用 master,报表使用 slave,那么报表 sql 将不会造成前台锁,保证了前 台速度。 主从复制的原理主从复制的原理 MySQL 之间数据复制的基础是二进制日志文件(二进制日志文件(binary log filebinary log file))。 一台 MySQL 数据库一旦启用二进制日志后,其作为master,它的数 据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据 库作为 slave 通过一个 I/O 线程与主服务器保持通信,并监控master 的二进制日志文件的变化, 如果发现 master 二进制日志文件发生变化, 则会把变化复制到自己的中继日志(Relay log)中,然后 slave 的一 个 SQL 线程会把相关的“事件”执行到自己的数据库中,以此实现从 数据库和主数据库的一致性,也就实现了主从复制。 简言之可分为下面几个步骤:简言之可分为下面几个步骤: 一、主库的更新事件会被写到 bin log 日志中。 二、从库启用 slave 服务,发起连接,连接到主库。 三、从库创建一个I/O 线程,从主库读取bin log日志的内容并写入到 relay log 日志中。 四、从库创建一个SQL 线程,从relay log里面读取内容,将更新内容 写入到从库。 主从复制需要的配置主从复制需要的配置 主服务器:主服务器: 1、开启二进制日志 2、配置唯一的 server-id 3、获得 master 二进制日志文件名及位置 4、创建一个用于 slave 和 master 通信的用户账号 从服务器:从服务器: 1、配置唯一的 server-id 2、使用 master 分配的用户账号读取 master 二进制日志 3、启用 slave 服务 主从复制实践主从复制实践 准备准备 两台虚拟机: centos1:192.168.1.109 主库,同时安装了 Mycat 进行读写分离 centos2:192.168.1.100 从库 主服务器配置主服务器配置 一、修改一、修改 my.confmy.conf 文件文件 在 /etc/ f 文件中的[mysqld]下面添加: [mysqld] #启用二进制日志 log-bin=mysql-bin #服务器唯一 ID,一般取 IP 最后一段 server-id=109 二、重启二、重启 MySQLMySQL 服务服务 service mysqld restart 三、建立账号并授权三、建立账号并授权 slaveslave mysqlGRANT FILE ON *.* TO root @ % IDENTIFIED BY 123456 ; mysqlGRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to root @ % identified by 123456 ; 注注:一般不用 root 帐号,“%”表示所有客户端都可能连,只要帐号, 密码正确, 此处可用具体客户端 IP 代替, 如 192.168.1.110, 加强安全。 四、刷新权限四、刷新权限 mysql PRIVILEGES; 五、查询五、查询 mastermaster 的状态的状态 mysql show master status; 从服务器配置从服务器配置 一、修改一、修改 my.confmy.conf 文件文件 在 /etc/ f 文件中的[mysqld]下面添加: [mysqld] #服务器唯一 ID,一般取 IP 最后一段 server-id=110 二、删除二、删除 UUIDUUID 文件文件 删除删除/var/lib/mysql/ f/var/lib/mysql/ f 文件,重新启动文件,重新启动 服务。服务。 三、配置从服务器三、配置从服务器 mysqlchange master to master_host= 192.168.1.109 ,master_port=3306,master_user= root ,master_password= 12 3456 ,master_log_file= mysql-bin.000001 ,master_log_pos=2678; 注注: 语句中间不要断开。master_port为mysql服务器端口号(无引号)。 master_user 为执行同步操作的数据库账户。 “2678”无单引号 此 处的 2678 就是 show master status 中看到的 position 的值, mysql-bin.000001 就是 file 对应的值。 四、启动从服务器的复制功能四、启动从服务器的复制功能 mysqlstart slave; 五、检查从服务器复制功能状态五、检查从服务器复制功能状态 mysql show slave status; 六、从服务器配置完成,连接数据库进行测试。六、从服务器配置完成,连接数据库进行测试。 读写分离读写分离 MySQL 的主从复制,只会保证主机对外提供服务,而从机是不对外提 供服务的,只是在后台为主机进行备份。 数据库读写分离对于大型系 统或者访问量很高的互联网应用来说,是必不可少的一个重要功能。对 于 MySQL 来说,标准的读写分离是主从模式,一个写节点Master 后 面跟着多个读节点, 读节点的数量取决于系统的压力, 通常是 1-3 个读 节点的配置。 Mycat 的读写分离是建立在 MySQL 的主从复制基础上 的。对 MySQL 进行读写分离控制的方法和中间件有很多,如 MySQL-Proxy、Mycat 等,这里介绍利用 Mycat 对 MySQL 数据库的 访问进行的读写分离。 MycatMycat 安装安装 默认数据端口为 8066,管理端口为 9066 Mycat 启动报错 .BindException: Address already in use 杀掉正在执行 的相关 java 进程 ps -ef|grep java kill -9 xxx MycatMycat 读写分离读写分离 利用 Mycat 对 MySQL 数据库的访问进行的读写分离,只需要配置两 个文件即可。分别是 schema.xml 文件和 server.xml。 配置配置 schema.xmlschema.xml sele