linux下mysql主从同步

来源:互联网 发布:wifi定位技术算法 编辑:程序博客网 时间:2024/05/22 02:01

linux下mysql主从同步 的实现原理

1、主服务器凡运行语句,都产生一个二进制日志 binlog

2、从服务器不断读取主服务器的binlog

3、从主服务读取到的binlog,转换为自身可执行的relaylog,

4、执行relaylog

 具体实施有虚拟机下有两台linux,IP为1和 2

1、1做为主服务器 2做从服务器

2、 保证主从3306端口互通.

3、 配置主服务器,打开binlog

 上面就是实现增量备份的思路。

下面我具体配置一下

一 、配置主服务器二进制日志

1.打开mysql的配置文件在 /etc/my.cnf

添加下面代码

#设置服务器

idserver_id = 1 

 #指定日志格式 位置、语句 和自动选择(mixed)

log-bin=mysql-bin

log-bin-index=master-bin.index

binlog_format=mixed

#要同步的数据库

binlog-do-db = tycp-dev  

#不同步的数据库

binlog-ignore-db = mysql

expire_logs_days = 7 #定时清除的时间

max_binlog_size = 215M 日志大小

[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockserver_id = 1 log-bin=mysql-binlog-bin-index=master-bin.indexbinlog_format=mixed#要同步的数据库binlog-do-db = tycp-dev   #不同步的数据库binlog-ignore-db = mysql # Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0# Recommended in standard MySQL setupsql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES max_connections=100000



2.重启mysql 
   
service mysql restart


3.进入mysql   输入  show master status;    出现下图的说明日志文件配好了。

日了,什么尼玛编辑器,好难用 麻辣隔壁的加不上图片。。。。。。。



也可可去mysql的安装目录去找 mysql-bin日志文件。
如果要同步整个数据库不用写 
数据库不用写 同步的哪个数据库

 
2.给从服务器设置授权账号
   主服务器 要给从服务器设置账号,指定某些ip才能访问。

   进入mysql   授权给客户端  哪些库和表 用户名为root 密码为root的账号在ip为192.168.1.2 起作用   

    grant all on *.* to 'root1'@'%' identified by 'root'  with grant option;
     flush privileges; 

二、配置从服务器1.配置从服务器 同样打开从mysql配置的my.cnf

[mysqld]datadir=/use/local/mysqlsocket=/use/local/mysql/mysql.sockserver-id=2  #设置从服务器id,必须于主服务器不同relay_log = mysql-relay-binlog_slave_updates = 1 read_only =1  replicate-do-db=tycp-dev  #需要同步的数据库名replicate-ignore-db=mysql  #不同步mysql系统数据库# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0# Recommended in standard MySQL setup



server_id是必须的,而且唯一。slave没有必要开启二进制日志,但是在一些情况下,必须设置,relay_log配置中继日志,log_slave_updates表示slave将复制事件写进自己的二进制日志
有些人开启了slave的二进制日志,却没有设置log_slave_updates,然后查看slave的数据是否改变,这是一种错误的配置。所以,尽量使用read_only,它防止改变数据(除了特殊的线程)。
但是,read_only并是很实用,特别是那些需要在slave上创建表的应用。



2.从启mysql
service mysql restart
3.开始监听复制
进入mysql 执行  告诉从服务器 从哪个ip 用那个用户名 密码   那个日志文件 从什么位置 
在主服务器上找开始复制的位置


  开始监听复制
change master to master_host='192.168.1.199',master_user='root',master_password='root',
 master_log_file='mysql-bin.000001',master_log_pos=129587784;


4.Start slave;   启动从服务器
执行 show slave status\G
 


 

常用命令
show  slave status\G     查看从服务器状态
show master status;     查看主的位置
reset slave ;     重置slave状态.
stop slave;   暂停slave状态;