主在执行sql语句后,记录一个二进制log文件(bin-log),从连接主,并获取到bin-log,存在到本地的relay-log上,并从上一次记录的位置执行sql,当遇到错误则停止同步。

PS:主从并不是实时同步,存在瞬间连接;当在网络断开后,正常后批量同步;修改从上的数据容易导致主上的bin-log错误而停止同步,所以从上的数据注意修改。

 

一,主从服务器安装Mysql,具体参考Mysql配置

二、配置主从

1.在从salve端配置vim /etc/my.cnf

  datadir = /data/mysql      ##此处为安装时定义的位置

  server-id=2

  replicate-do-db=db1,db2   ##需要同步的库

  replicate-ignore-db=db1,db2  ##不需要同步的库

  ##PS 同步库的参数21,需对应主的my.cnf配置是哪个参数

屏蔽以下参数,不需要使用:

  skip-bdb

  skip-networking

      log-bin=node1-bin

      binlog-ignore-db=test,mysql

      master-host=XXXXXXX

      master-password=XXXXXX

      master-connect-retry=XXX

      mysql.server以及mysqld_safe  模块的内容屏蔽

 

      ##配置从的启动配置文件

      vim /etc/init.d/mysqld      ##修改2行参数

      basedir=/usr/local/mysql

      datadir=/data/mysql

 

 2.在主master端,修改配置文件vim /etc/my.cnf

      ##开启以下参数:

      server-id         =1

      log-bin=mysql-bin

      binlog-do-db=db1,db2   ##需要同步的库

      binlog-ignore-db=db1,db2  ##不需要同步的库

      ##同步库的参数21,或可都不使用,按实际需求

##使用mysql命令,replip、密码均为为从slave的账号、IP以及密码I

     grant replication slave on *.* to repl@192.168.137.111 identified by 123456;

     ##创建后,可以测试slave端是否可以链接到主master端,在salve使用命令:

       mysql -urepl p123456 hMasterIP

       ##若加上-P为指定端口,默认为3306

##回到主master端,锁表

flush tables with read lock;

show master status;         ##需记下filePosition列的值

quit

 

 

##备份数据库db1为数据库名称,并cp到从slave

mysqldump uroot p123456 db1 > 1.sql

scp P36000 1.sql [email protected]:/root/   ##拷贝到从上的root目录下-P为指定端口

 

3.在从slave端上:

  ##创建db1的库

  mysql -uroot -e create database db1;

  mysql -uroot db1 </root/1.sql

  ##使用mysql命令,mysql操作

  mysql

  slave stop;

change master to master_host=192.168.137.110,master_port=3306,master_user=repl,master_password=123456, master_log_file=master端记录的file列值, master_log_pos= 主master端记录的position的列值

##PS如果这段运行报错,把/data/mysql目录的XXbinXX的文件删掉即可回到slave stop继续

slave start;

###回到主master

mysql uroot unlock tables;

###回到从slave

mysql -uroot –show slave status\G;

Slave_IO_Running以及Slave_SQL_Running都为YES表示成功,否则为失败

 

4.测试主从

在主端创建表、删除表等等,在从端可查询

 

5.注意

主从配置起来很简单,但是这种机制也是非常脆弱的,一旦我们不小心在从上写了数据,那么主从也就被破坏了。另外如果重启master,务必要先把slave停掉,也就是说需要在slave上去执行 slave stop 命令,然后再去重启mastermysql服务,否则很有可能就会中断了。当然重启完后,还需要把slave给开启 slave start