MySQL主从同步(复制)的配置

Posted

tags:

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


1、主从复制的原理:

*Master,记录数据更改操作

- 启用binlog记录模式

- 允许Slave读取binlog日志

*Slave运行2个同步线程

- Slave_IO:负责连接Master,复制其binlog日志文件到本机的relay-log文件

- Slave_SQL:执行本机relay-log文件里的SQL语句,重现Master的数据操作

2、基本构建思路:

1)初始化现有库:将主库导入从库,确保数据一致性

2)配置Master,主服务器:调整运行参数,授权一个同步用户

3)配置Slave,从服务器:调整运行参数,发起同步操作

3、初始化现有库:

**从数据库服务器上一定要有主数据库服务器的库和表,但主数据库服务器上不需要必须有从数据库服务器上的库和表。从服务器应包括希望同步的所有库,对采用MyISAM的库,可离线备份。

mysql>reset master;  //重置binlog日志

[[email protected]~]#mysqldump -uroot -p123 -B mysql test db6000 >/dbbak/threedb.sql //完整备份主服务器数据库文件

对于从服务器,离线导入由主服务器提供的备份,清空同名库(若有的话)

Mysql>drop database test;

[[email protected]~]#scp svr:/dbbak/threedb.sql  /root/   //远程拷贝主服务器备份文件

[[email protected]~]#mysql -uroot -p123 <threedb.sql  //恢复主服务器的备份文件到本机数据库

**从数据库服务器如果是克隆的虚拟机的话要修改下面文件uuid的值

[[email protected] mysql]# cat /var/lib/mysql/auto.cnf

[auto]

server-uuid=a1c22f29-7d1a-11e4-b7f9-099e0022adfD

4、配置主服务器:

1)调整运行参数,启用binlog及允许同步

[[email protected]~]#vim /etc/my.cnf

[mysqld]

Log_bin          //启用binlog日志

Server_id=6     //指定服务器ID号,标识自己身份,一般使用IP地址主机位

Innodb_flush_log_at_trx_commit=1    //优化设置

Sync-binlog=1     //允许日志同步

……

[[email protected]~]#service mysql restart   //重启服务,使设置生效

2)授权备份用户:允许slaveuser192.168.4.0/24网段访问,对所有库(默认不允许对单个库)有同步权限

mysql>grant replication slave on *.* to [email protected]”192.168.4.%”  identified by “123”;

3)查看主服务器状态,记住当前的binlog日志文件名、偏移量pos点号

mysql>show master status\G;  //查看当前正在使用的binlog日志文件名和偏移量 pos点号

file:svr6-bin.000003   //日志文件名

position:335     //偏移量

……

5、配置从服务器:

1)调整运行参数,启用binlog及允许同步,启用只读模式

[[email protected]~]#vim  /etc/my.cnf

[mysqld]

log_bin        //启用binlog日志

server_id=20       //指定服务器ID

Innodb_flush_log_at_trx_commit=1    //优化设置

sync-binlog=1     //允许日志同步

read_only=1    //只读模式

……

[[email protected]~]#service mysql restart   //重启服务,使设置生效

2)发起同步操作,指定主服务器相关参数

[[email protected]~]#mysql   -uroot  -p123

mysql> show slave status;

 

mysql>change  master  to  master_host="192.168.4.6",

master_user="slaveuser",

master_password="123456",

master_log_file="svr6-bin.000003",    //binlog日志文件

master_log_pos=335;   //偏移量pos点号

 

mysql> showslave status\G;

slave_IO_Running: No  

slave_SQL_Running: No  

 

mysql>start   slave;     //启动复制

 

mysql> show slave status\G;   //查看从服务器状态

slave_IO_Running: YES     //IO线程已运行

slave_SQL_Running: YES     //SQL线程已运行

6、测试主从同步效果:

在主数据库服务器本机登录,建库建表,从数据库服务器上有主数据库服务器上的库和表,在主数据库服务器执行插入、更新操作,从服务器有同步更新,就成功了。

7MySQL数据库主从同步工作原理

1Slave_IO_Running:负责把主数据库服务器当前正在使用的binlog日志里的sql语句,拷贝到本机relaybinlog日志里,在master_log_file的文件里从master_log_pos开始拷贝

Master.info :保存主从关联信息(change  master   to……),启动服务时加载。

 pc205-relay-bin.000002    pc205-relay-bin.index   relay-log.info

vim /etc/my.cnf

[mysqld]

Relay_log=……

2Slave_SQL_Running:负责执行本机relaybinlog日志里的sql语句,把数据写进数据库里

3)报错信息:

IO进程出错:查看状态时Last_IO_Errno: 0   //错误次数

                Last_IO_Error: //最后一次出错信息

IO出错的情况:

- 连接不上主数据库服务器(ping  iptables selinux 授权  主服务器当前使用的日志文件和节点指错(在主服务器使用show master status;查看在从服务器使用change master to ……重新设置,要先停止进程 stop slave;改好后start slave;) 

SQL进程出错:Last_SQL_Errno: 0

               Last_SQL_Error:

SQL出错的情况:和主数据库服务器上的库、表、表结构不一致(把主服务器上的库、表备份还原到从服务器上)

4)停止从服务器:

stop slave 

删除Master.info   pc205-relay-bin.000002    pc205-relay-bin.index   relay-log.info

8、主从同步的结构模式

1)一主一从:主服务器坏掉访问从服务器的时候,从服务器的数据没有备份;从服务器坏掉的时候主服务器的数据也没有备份里

2)一主多从:配置时在主服务器上授权多个slave用户在做从服务器的主机上连接自己;或者授权一个用户在@“%”所有主机连接自己(不安全)。

3)主从从:配置主从,配置从从(同主从),主服务器和从从服务器不同步,客户端连接从服务器产生的sql语句记录到本身的binlog日志,而拷贝的主服务器的sql语句记录到relaybinlog日志里,从从服务器只读取从服务器本身binlog日志。要主服务器和从从服务器同步,要配置从服务器:

Vim  /etc/my.cnf

[mysqld]

……

Log-slave-updates   //记录从库更新,允许链式复制(A-B-C)配置后从主服务器同步过来的日志即写到relaylog里也写到自己的binlog日志里,以便自身的从服务器根据binlog读取日志以同步数据

……

4)主主结构:互为主从

9、仅需要从服务器备份主服务器的某个或某些库:

授权时不可以仅对某库授权,replicationslave授权必须时全局授权

**在配置主从同步时,在主数据库服务器上设置让从数据库服务器如何备份自己的库:

Vim  /etc/my.cnf

[mysqld]

……

Binlog-do-db=数据库名   //设置主服务器对哪些库记binlog日志,此选项可设置多条,省略时复制所有库

Binlog-ignore-db=数据库名 //设置主服务器对哪些库不记binlog日志(两条矛盾,不同时用)

……

**或在配置主从同步时,在从数据库服务器上设置自己如何备份主数据库服务器的库:

Vim  /etc/my.cnf

[mysqld]

……

Replicate-do-db=数据库名  //仅复制指定库,其他库将被忽略,此选项可设置多条,省略时复制所有库

Replicate-ignore-db=数据名 //不复制哪些库(两条矛盾,不同时用)

**只在主服务器或从服务器一端设置即可。


本文出自 “IT技术学习” 博客,请务必保留此出处http://learningit.blog.51cto.com/9666723/1789591

以上是关于MySQL主从同步(复制)的配置的主要内容,如果未能解决你的问题,请参考以下文章

RocketMQ源码-主从同步复制和异步复制

mysql数据库主从同步复制原理

mysql主从同步原理,配置,同步延迟处理

mysql主从同步原理,配置,同步延迟处理

mysql主从同步原理,配置,同步延迟处理

mysql主从同步原理,配置,同步延迟处理