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账号一样
- 生产主库用户授权;
grant select,insert,update,delete on `blog`.* to 'blog'@'10.0.0.%' identified by 'boy456';
- 从库用户授权
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实现高可用自动切换
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;
[wjq@localhost ~]$ 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项状态参数
[wjq@localhost ~]$ 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.%不能连接?