mysql主从复制

Posted Simon1020

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql主从复制相关的知识,希望对你有一定的参考价值。

1.首先确保主从服务器上的mysql版本相同

主: ==============================================================================================

2. 

在主服务器上, 创建一个充许从数据库来访问的用户slave,密码为:123456, 然后使用REPLICATION SLAVE赋予权限,如:

mysql> GRANT REPLICATION SLAVE ON *.* TO ‘slave‘@‘192.168.200.138‘ IDENTIFIED BY ‘123456‘;

GRANT FILE ON *.* TO ‘slave‘@‘192.168.200.138‘ IDENTIFIED BY ‘123456‘;

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to ‘slave‘@‘192.168.200.138‘ identified by ‘123456‘; 

flush privileges; 

3. 

修改主数据库的配置文件my.cnf(windows为my.ini),开启BINLOG,并设置server-id的值,修改之后必须重启Mysql服务

[mysqld]

default-character-set=utf8

lower_case_table_names=1
#binlog-do-db=db1
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=information_schema
#服务器唯一ID,一般取IP最后一段
server-id=134
#每表一文件
innodb_file_per_table=1
#启用二进制日志
log-bin=mysql-bin
log-bin-index=master-bin.index
#志滚动方式
binlog_format=mixed

 

4. 

之后可以得到主服务器当前二进制日志名和偏移量,这个操作的目的是为了在从数据库启动后,从这个点开始进行数据的恢复

mysql> show master status;

*************************** 1. row ***************************

File: mysql-bin.000003             ------二进制日志名

Position: 243                       -------偏移量

Binlog_Do_DB:                   -------要进行主从复制的数据库

Binlog_Ignore_DB:                   -------不进行主从复制的数据库

1 row in set (0.00 sec)

5.

好了,现在可以停止主数据的的更新操作,并生成主数据库的备份,我们可以通过mysqldump到处数据到从数据库,当然了,你也可以直接用cp命令将数据文件复制到从数据库去

注意在导出数据之前先对主数据库进行READ LOCK,以保证数据的一致性

mysql> flush tables with read lock;

Query OK, 0 rows affected (0.19 sec)

之后是mysqldump

mysqldump -h127.0.0.1 -p3306 -uroot -p 123456 > /home/mysqldump/test.sql

最好在主数据库备份完毕,恢复写操作

mysql> unlock tables;

Query OK, 0 rows affected (0.28 sec)

6.

将刚才主数据备份的test.sql复制到从数据库,进行导入

 

 

 

从: ==============================================================================================

1.

接着修改从数据库的my.cnf(windows为my.ini),增加server-id参数,指定复制使用的用户,主数据库服务器的ip,端口以及开始执行复制日志的文件和位置

[mysqld]

default-character-set=utf8
server-id=138
innodb_file_per_table=1
log-bin=mysql-bin
log-slave-updates=1

master-host=192.168.200.137
master-user=slave
master-pass=123456
master-port=3306
master-connect-retry=60

#replicate-do-db=test
replicate-wild-ignore-table=mysql.%
#设置中继日志
relay-log=relay-log
#中继日志索引
relay-log-index=relay-log.index

sync_master_info=1
sync_relay_log=1
sync_relay_log_info=1


2.

在从服务器上开启复制功能

配置从服务器

mysql>change master to master_host=‘192.168.200.137‘,master_port=3306,master_user=‘slave‘,master_password=‘123456‘,master_log_file=‘mysql-bin.000001‘,master_log_pos=106

注意语句中间不要断开,master_port为mysql服务器端口号(无引号),master_user为执行同步操作的数据库账户,“120”无单引号(此处的120就是show master status 中看到的position的值,这里的mysql-bin.000001就是file对应的值)。

 

在从服务器上,启动slave进程

mysql> start slave;

3.

在从服务器进行show salve status验证

mysql> SHOW SLAVE STATUS \G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: localhost

Master_User: root

Master_Port: 3306

Connect_Retry: 3

Master_Log_File: mysql-bin.003

Read_Master_Log_Pos: 79

Relay_Log_File: gbichot-relay-bin.003

Relay_Log_Pos: 548

Relay_Master_Log_File: mysql-bin .003

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

 

注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)

错误处理:

如果出现此错误:

Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

因为是mysql是克隆的系统所以mysql的uuid是一样的,所以需要修改。

解决方法:

删除/var/lib/mysql/auto.cnf文件,重新启动服务。

4.

好了,现在可以在我们的主服务器做一些更新的操作,然后在从服务器查看是否已经更新

 






























以上是关于mysql主从复制的主要内容,如果未能解决你的问题,请参考以下文章

MySQL中主从复制不同步?

MySQL主从复制和读写分离

MySQL主从复制和读写分离

Linux----------mysql主从复制和基于GTID主从复制

MySQL主从复制

mysql主从复制概述以及配置mysql5.7.10实现简单主从复制