mysql主从同步安装及原理分析

mysql主从同步

防止数据写从库方法:

1.生产一般采取忽略授权表方式同步,对从服务器上用户仅授权select读权限.

2.在slave服务器启动选项增加参数或者在my.cnf配置文件中加read-only参数来确保从库只读,当然授权用户和read-only参数二者同时操作效果更佳,生产中使用方案.

Read-only参数让slave服务器只允许来自slave服务器线程或者具有super权限的用户更新.确保slave服务器不接受普通用户更新,slave服务器启动选项增加read-only也一样.

用户

密码

端口

Ip

写库:blog_w

Boy456

3306

10.0.0.7

读库:blog_r

Boy789

3306

10.0.0.8

 

用户

密码

端口

Ip

写库:blog

Boy456

3306

10.0.0.7

从库:blog

Boy456

3306

10.0.0.8

下面表格中的主从库名一样,密码一样,端口一样,只是ip不一致如给一个人的mysql,ftp,svn账号一样

  1. 生产主库用户授权;

grant select,insert,update,delete on `blog`.* to 'blog'@'10.0.0.%' identified by 'boy456';

  1. 从库用户授权

grant select on `blog`.* to 'blog'@'10.0.0.%' identified by 'boy456';

最简单:在主库配置binlog-ignore-db=mysql

Mysql主从复制

http://blog.51cto.com/13466287/2074039

1.主从服务器互为备份

         主服务器出现问题时,人工或自动切换到从服务器继续提供服务,类似nfs存储数据通过inotify+rsync同步到备份的nfs

http://blog.51cto.com/oldboy/1240412   drbd实现高可用自动切换

mysql主从同步安装及原理分析

2.主从服务器读写分离分担网站压力

3.根据业务拆分开独立分担压力

Maseràslave(3个浏览帖子,博客,文章) slave(后台访问,脚本任务,数据分析,开发人员浏览)slave(备份)

如何实现mysql主从读写分离

通过程序实现读写分离是最好的,软件mysql-proxy,amoeba

Mysql主从复制原理介绍

Mysql的主从复制是一个异步的复制过程(虽然一般情况下感觉是实时的),数据将从一个mysql数据库(master)复制到另一个mysql库(slave),在master与slave之间实现主从复制由3个线程参与完成.其中2个线程(sql线程和I/o线程)在slave端,另外一个线程(I/o线程)在master端.

要实现mysql的主从复制,首先必须打开master端的binlog记录功能,否则无法实现.slave从master端获取binlog日志,然后在slave以相同顺序执行获取的binlog日志中所记录的各种sql操作.

在mysql配置文件my.cnf中mysqld模块([mysqld]标识后的参数部分)增加”log-bin”参数选项实现

[mysqld]

log-bin=/data/3306/mysql-bin

 

mysql> show variables like 'server_id';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id     | 1     |

+---------------+-------+

1 row in set (0.00 sec)

 

mysql> show variables like 'log_bin';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| log_bin       | ON    |

+---------------+-------+

建立用于从库复制的账号rep,密码是wj123

mysql> grant replication slave on *.* to 'rep'@'192.168.125.%' identified by 'wj123';

登录从库后执行

登录主库后show master status;

下面要用MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=2303

字符串用单引号括起来,数值不用引号,内容前后不能有空格.

mysql> CHANGE MASTER TO MASTER_HOST='192.168.125.128',MASTER_PORT=3306,MASTER_USER='rep',MASTER_PASSWORD='wj123',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=2303;

[[email protected] ~]$ mysql -uroot -p'wj123' -S /data/3307/mysql.sock -e "start slave;"

mysql -uroot -p'wj123' -S /data/3307/mysql.sock -e "show slave status\G;"

主从复制是否成功,最关键以下3项状态参数

[[email protected] ~]$ mysql -uroot -p'wj123' -S /data/3307/mysql.sock -e "show slave status\G"|egrep "IO_Running|SQL_Running|_Behind_Master" 

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

        Seconds_Behind_Master: 0

Mysql主从复制问题:

主库show master status;没返回状态结果,Empty set

解答:主库binlog功能开关没开或没生效导致.

192.168.%.%可以连接,192.168.0.%不能连接?