Mysql主从搭建详细过程

安装环境

主服务器:WINDOWS 7 x64bit   MySQL5.7 x64bit

从服务器:CENTOS6.7  x64bit   MySQL5.7 x64bit

主服务器配置

1、修改主MYSQL的配置文件,添加或更新如下内容

[mysqld]
log-bin=mysql-bin
server-id=1

1)为了在实现Innodb引擎的复制能最大可能的可用和一致性,可以添加如下参数innodb_flush_log_at_trx_commit=1 and sync_binlog=1;

2)确保skip-networking没有启用,这样当网络异常时复制会失败。

2、重启主MYSQL,并创建一个复制专用的账户

mysql -h localhost -u root -p
mysql> CREATE USER 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.mydomain.com';

3、获取二进制日志的坐标

如果之前主MYSQL没有启用binary logging,那么 SHOW MASTER STATUS 和 mysqldump --master-data的结果都会是空的,此时,从MYSQL中需要指定的日志文件名和坐标分别为''和4;

如果之前已经启用了binary logging,那么就如下操作:

新开一个窗口执行 mysql> FLUSH TABLES WITH READ LOCK;
在另一窗口中执行 mysql > SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 73 | test | manual,mysql |
+------------------+----------+--------------+------------------+

file就是二进制日志文件,position就是日志坐标,记录下这两个值。用于告知从MYSQL该日志该坐标之前的数据需要重演,该坐标之后的数据需要从主MYSQL同步。

4、如果主MYSQL已经有数据存在:

如果是已经有数据的MYSQL做主MYSQL,那么就要创建主MYSQL的数据快照了。如果想仅仅是安装一个新的主MYSQL,并且想把其它数据库的数据注入到这个replications里面,那么就等这个replications搭建好后再向master导入数据,这样数据就自然同步到从服务器了。官档真是脑残,显而易见的事还要说一遍。

创建数据快照也有两种方法:mysqldump和直接拷贝

mysqldump的方法是在主MYSQL上执行

shell> mysqldump --all-databases --master-data > dbdump.db

master-data选项可以实现在从MYSQL启动复制进程时自动向从该slave添加CHANGE MASTER TO语句。也可以不指定,但需要手工的在新窗口锁定所有的表FLUSH TABLES WITH READ LOCK;

ignore-table 排除所有的表

databases 指定个别数据库

直接拷贝有三种情况:

1)如果购买了MYSQL企业备份组件, InnoDB表可以使用mysqlbackup生成一个一致的备份。但是这种备份也不可靠,如果主从服务器的ft_stopword_file、ft_min_word_len、 ft_max_word_len 这些参数的值不一样,或者拷贝的表的全文索引。

2)对于Innodb表使用冷备方式:先slow shutdown数据库,然后手工拷贝相关数据文件。步骤如下:

FLUSH TABLES WITH READ LOCK;
在另一窗口执行mysqladmin shutdown 
拷贝文件
重启主MYSQL

3)对于MyISAM表如果数据文件存在于一个单个的文件系统上,就可以直拷贝,不需要关机。如果只是replication某一个数据库,那么就只复制和该数据库的表相关的文件。而对于innodb引擎而言,所有的表都存在在一个system表空间文件上(除非设置了innodb_file_per_table=TRUE)

FLUSH TABLES WITH READ LOCK;
拷贝文件
在请求read lock的窗口执行UNLOCK TABLES; 释放锁

The following files are not required for replication:

Files relating to the mysql database.

The master info repository file, if used (see Section 18.2.4, “Replication Relay and Status Logs”).

The master's binary log files.

Any relay log files.

从服务器配置

1)修改配置文件,指定server-id,多个slaves不可重复。注:一个从MYSQL可以做另一个从MYSQL的主MYSQL.主从是相对的。

2)数据重演:

使用--skip-slave-start启动salve;
如果是mysqldump导出的数据就直接导入数据 mysql < fulldb.dump
如果是直接拷贝的数据文件配置主MYSQL的信息:
    mysql> CHANGE MASTER TO
    -> MASTER_HOST='master_host_name',
    -> MASTER_USER='replication_user_name',
    -> MASTER_PASSWORD='replication_password',
    -> MASTER_LOG_FILE='recorded_log_file_name',
    -> MASTER_LOG_POS=recorded_log_position;
完全启动数据库START SLAVE;

向Replication添加slave

从已存在的slave中复制


1)关闭一个已存在的slave

shell> mysqladmin shutdown

2)直接拷贝该slave的数据目录到新slave,确保拷贝了日志文件和中继文件。

修改 --relay-log的值,默认为主机名做为文件名的一部分。还要修改 --relay-log-index 的值。可以修改和日志文件来源的slave一样。如果源slave也没有设置这两个参数,那么这个新slave可以使用existing_slave_hostname-relay-bin和existing_slave_hostname-relay-bin.index做为值。

Alternatively, if you have already tried to start the new slave after following the remaining steps in this section and have encountered errors like those described previously, then perform the following steps:

    a. If you have not already done so, issue a STOP SLAVE on the new slave. If you have already started the existing slave again, issue a STOP SLAVE on the existing slave as well.

    如果你已经这样做了就在新slave上执行STOP SLAVE,如果你已经启动了已存在的slave,就在已存在的slave上执行STOP SLAVE。

    b. Copy the contents of the existing slave's relay log index file into the new slave's relay log index file, making sure to overwrite any content already in the file.

     复制已存在的slave的中继日志索引文件作为新的slave的中继日志索引文件,确定覆盖了这个文件的所有内容。

    c. Proceed with the remaining steps in this section.

     继续剩下的步骤。

3)Copy the master info and relay log info repositories (see Section 18.2.4, “Replication Relay and Status Logs”) from the existing slave to the new slave. These hold the current log coordinates for the master's binary log and the slave's relay log.

复制已存在的slave的master info和relay log info仓库到新slave。这里包含了主MYSQL的二进制日志和从MYSQL的中继日志的当前日志的坐标

4)Start the existing slave.

先启动已存在的slave

5) On the new slave, edit the configuration and give the new slave a unique server-id not used by the master or any of the existing slaves.

修改新slave的配置文件,添加server-id。

6) Start the new slave. The slave uses the information in its master info repository to start the replication process.

启动新slave。这新slave使用它的master info repository中的信息动启动replication 进程。


0

热门评论