主在执行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 同步库的参数2选1,需对应主的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 ##不需要同步的库
##同步库的参数2选1,或可都不使用,按实际需求
##使用mysql命令,repl、ip、密码均为为从slave的账号、IP以及密码I
grant replication slave on *.* to ‘repl’@192.168.137.111’ identified by ‘123456’;
##创建后,可以测试slave端是否可以链接到主master端,在salve使用命令:
mysql -urepl –p123456 –h主Master的IP
##若加上-P为指定端口,默认为3306
##回到主master端,锁表
flush tables with read lock;
show master status; ##需记下file、Position列的值
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 –e “unlock tables;”
###回到从slave端
mysql -uroot –e “show slave status\G;”
若Slave_IO_Running以及Slave_SQL_Running都为YES表示成功,否则为失败
4.测试主从
在主端创建表、删除表等等,在从端可查询
5.注意
主从配置起来很简单,但是这种机制也是非常脆弱的,一旦我们不小心在从上写了数据,那么主从也就被破坏了。另外如果重启master,务必要先把slave停掉,也就是说需要在slave上去执行 slave stop 命令,然后再去重启master的mysql服务,否则很有可能就会中断了。当然重启完后,还需要把slave给开启 slave start