
一、前言由于最近有个项目随着业务增长存在并发压力隐患优化迫在眉睫。由于当前系统是单数据库系统原因能优化的地方也尽力优化了但是数据库瓶颈还是严重限制了项目的并发能力。所以就考虑了添加数据库来增大项目并发能力。考虑到读写分离等从而需要进行mysql主从复制。在此介绍如何进行mysql主从搭建。二、提前准备由于需要提前进行搭建测试本地使用了VirtualBox创建了两个虚拟机具体如何创建可以参考《win10搭建VagrantVirtualBox环境》。同时准备两个mysql数据库linux下mysql安装方法可以参考《linux下安装mysql-5.7.23详细步骤》。从而我们环境准备如下IP主从关系server-id192.168.33.11master11192.168.33.12salve12注意:确保主机ip和从机ip在同一网段即在局域网内在从机上执行链接信息命令让从机主动连接主机由于配置文件的信息校验通过主机允许从机访问主机MySQL服务从而实现主从结构。三、主从搭建3.1 步骤一master修改mysql的my.cnf文件在[mysqld]下增加如下内容# 同一局域网要唯一 server-id 11 # 开启二进制日志可以随便取 log-bin mysql-bin #自动清理 7 天前的log文件,可根据需要修改 expire_logs_days 7 # 复制过滤不需要备份的数据库不输出mysql库一般不用,多个库写多行 binlog-ignore-db mysql # 为每个session分配内润在事物过程中用来存储二进制日志的缓存 binlog_cache_size 2M # 主从复制的格式mixdedstatementrow binlog_format mixed log_bin_index master-bin.index注意配置内容必须在[mysqld]的下面。3.2 步骤二slave修改mysql的my.cnf文件在[mysqld]下增加如下内容# 同一局域网要唯一 server-id 12 # 开启二进制日志以备slave作为其他slave的master时使用 log-bin mysql-slave-bin # relay_log配置中继日志 relay_logedu-mysql-relay-bin # 复制过滤不需要备份的数据库不输出 binlog-ignore-db mysql # 为每个session分配内润在事物过程中用来存储二进制日志的缓存 binlog_cache_size 2M # 主从复制的格式mixdedstatementrow binlog_format mixed # 如果需要同步函数或者存储过程 log_bin_trust_function_creatorstrue # 跳过主从复制的所有错误或指定类型的错误以免slave端复制中断如1062主键重复 1032 主从复制数据不一致 slave_skip_errors1062 #加上以下参数可以避免更新不及时SLAVE 重启后导致的主从复制出错 read_only 1 master_info_repository TABLE relay_log_info_repository TABLE relay-log slave-relay-bin #主服务器I/O日志读取、记录及存放 relay-log-index slave-relay-bin.index3.3 步骤三master在master节点重启mysql服务后登陆mysql终端执行如下命令mysql grant replication slave, replication client on *.* to root192.168.33.12 identified by 123456; Query OK, 0 rows affected, 1 warning (0.01 sec) mysql flush privileges; Query OK, 0 rows affected (0.01 sec)注意:创建用户必须放开从库地址访问。查看新增的用户信息select user,host from mysql.user;查看master信息show master status;3.4 步骤四slave在slave节点重启mysql服务后登陆mysql终端设置需要同步的master节点信息同时需要指定同步位置。mysql change master to master_host192.168.33.11, master_userroot, master_password123456, master_port3306, master_log_filemysql-bin.000017, master_log_pos194; Query OK, 0 rows affected, 2 warnings (0.03 sec)注意:具体的配置信息要以步骤三master中配置和查询的结果为依据master_log_filemaster状态结果中Filemaster_log_posmaster状态结果中的Position。开启slave并查看状态mysql start slave; Query OK, 0 rows affected (0.00 sec) mysql show slave status\G;注意: 只有看到Slave_IO_Running、Slave_SQL_Running都为Yes时主从才算搭建完成。四、主从测试4.1 测试数据库同步4.1.1 创建数据库mastermysql show databases; mysql create database testdb default character set utf8 collate utf8_general_ci;4.1.2 查看数据库同步slavemysql show databases;4.2 测试表数据同步4.2.1 建表并插入数据mastermysql use testdb; mysql show tables; mysql create table student ( sno int(11) not null auto_increment comment 学号, sname varchar(50) character set utf8 collate utf8_general_ci not null comment 姓名, ssex varchar(2) character set utf8 collate utf8_general_ci not null comment 性别, primary key (sno) using btree ) engine innodb auto_increment 1 character set utf8 collate utf8_general_ci row_format dynamic; mysql insert into student values (1, KangKang, M); mysql insert into student values (2, Mike, M); mysql insert into student values (3, Jane, F); mysql select * from student;4.2.2 查看数据库同步slavemysqlusetestdb;mysqlshowtables;mysqlselect*fromstudent;