mysql 主从 读写分离

说明:

1.主从是 数据同步  ,主库数据 同步到 从库(配置mysql 实现)

2. 读写分离 是 代理去 根据 crud 如果是 增删改 操作 主库,查询就 操作从库(mysql 有插件实现,或者用中间件 mycat等)

3. mysql 配置 主从  需要  主从库 mysql 版本一致,从库版本 可以比主库 版本高  ,不可以低

实现 主从配置:

一 、配置主库

(1)配置Master主服务器

在Master MySQL上创建一个用户‘repl’,并允许其他Slave服务器可以通过远程访问Master,通过该用户读取二进制日志,实现数据同步(命令方式,也可以通过可视化工具 如 Navicat 实现 用户操作)

1 mysql>create user repl; //创建新用户
2 //repl用户必须具有REPLICATION SLAVE权限,除此之外没有必要添加不必要的权限,密码为mysql。说明一下192.168.0.%,这个配置是指明repl用户所在服务器,这里%是通配符,表示192.168.0.0-192.168.0.255的Server都可以以repl用户登陆主服务器。当然你也可以指定固定Ip。
3 mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.%' IDENTIFIED BY 'mysql';

 (2)找到MySQL安装文件夹修改my.Ini文件。mysql中有好几种日志方式,这不是今天的重点。我们只要启动二进制日志log-bin就ok。

 在[mysqld]下面增加下面几行代码

server-id=79
log-bin=mysql-bin
binlog_format=mixed
log-bin-index=master-bin.index
binlog-do-db=db212

 

扫描二维码关注公众号,回复: 377608 查看本文章

 (3)查询主数据库状态

Mysql> show master status;

+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 | 261 | | |
+------------------+----------+--------------+------------------+

记录下 FILE 及 Position 的值,在后面进行从服务器操作的时候需要用到。

二、配置从库

   (1)配置从服务器

找到MySQL安装文件夹修改my.ini文件,在[mysqld]下面增加下面几行代码

 server-id=2

 log-bin=mysql-bin

 binlog_format=mixed 

 relay-log-index=slave-relay-bin.index

 relay-log=slave-relay-bin

 重启MySQL服务

(2)连接Master

     命令可以再 可视化工具里执行

change master to master_host='192.168.0.104', //Master 服务器Ip
master_port=3306,
master_user='repl',
master_password='mysql', 
master_log_file=' mysql-bin.000005',//Master服务器产生的日志
master_log_pos=261 ;

 

 

(3)启动Slave

       start slave;

另:

     stop slave; //停止从库的 主从服务

      mysql> show slave status;   //主从同步检查

==============================================
**************** 1. row *******************
Slave_IO_State:
Master_Host: 192.168.10.130
Master_User: rep1
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000005
Read_Master_Log_Pos: 415
Relay_Log_File: localhost-relay-bin.000008
Relay_Log_Pos: 561
Relay_Master_Log_File: mysql-bin.000005
Slave_IO_Running: YES
Slave_SQL_Running: YES
Replicate_Do_DB:
……………省略若干……………
Master_Server_Id: 1
1 row in set (0.01 sec)
==============================================

其中Slave_IO_Running 与 Slave_SQL_Running 的值都必须为YES,才表明状态正常。

如果主服务器已经存在应用数据,则在进行主从复制时,需要做以下处理:
(1)主数据库进行锁表操作,不让数据再进行写入动作
mysql> FLUSH TABLES WITH READ LOCK;

(2)查看主数据库状态
mysql> show master status;

(3)记录下 FILE 及 Position 的值
将主服务器的数据文件(整个/opt/mysql/data目录)复制到从服务器,建议通过tar归档压缩后再传到从服务器解压。

(4)取消主数据库锁定
mysql> UNLOCK TABLES;

 

OK所有配置都完成了,这时候大家可以在Master Mysql 中进行测试了,因为我们监视的时Master mysql  所有操作日志,所以,你的任何改变主服务器数据库的操作,都会同步到从服务器上。创建个数据库,表试试吧。

 

 

参考地址:

http://www.cnblogs.com/alvin_xp/p/4162249.html

http://blog.csdn.net/ccrrt/article/details/8514842

 

 

 

 

 

MYSQL主从同步故障

 

 Error 'Duplicate entry '3776' for key 'PRIMARY'' ON query.

  DEFAULT DATABASE: 'dcloud-serve'. QUERY: 

  'insert into ts_service_db(db_type,db_ip,db_port,db_instance,db_user,db_password,data_type,remark,service_code)

   values(1,'192.168.0.52',6379,'','','',0,'msg_Redis','201605040932099988'),

   (1,'192.168.0.52',6379,'','','',0,'realData_Redis','201605040932099988'),

   (1,'192.168.0.52',6379,'','','',1,'alarm_Redis','201605040932099988'),

   (0,'192.168.0.104',3306,'dcloud-device','root','root',0,'device_MySQL','201605040932099988')'

进入从库查看一下

  show global variables like 'binlog_format';

      显示 当前的格式为statement

  需要把格式改为 mixed格式

  修改从库的 my.cfg

  在[mysqld]下面加入下面这行

        log-bin=mysql-bin

  binlog_format=mixed

 

     重启mysql服务

另:

 

     强制跳过 1062错误 配置,修改从库的/etc/my.cnf文件

  在里面的[mysqld]下面加入了一行

  slave-skip-errors = 1062 (忽略所有的1062错误)

   

 

 

猜你喜欢

转载自feiteyizu.iteye.com/blog/2297669