说明:
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
(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错误)