MySQL的主从
以下是个人实例操作得出的结论:
mysql的主从同步是一个很成熟的架构:
优点:
①:在从服务器可以执行查询工作,降低主服务器压力(所谓的读写分离)
②:在从主服务器进行备份,避免备份期间影响主流服务器服务(不太懂是到底在从还是主上面进行操作)
③:当主服务出现问题时,可以切换到从服务器。
配置开始
两台服务器
192.168.0.1 主服务器 master
192.168.0.2 从服务器 slave
主服务器
配置主服务器的my.ini
在最下面添加
read-only=0 #主机读写权限,读写都可以
log-bin = mysql-bin #日志文件 必填项
server-id = 1 # 1-32 必填项
replicate-do-db = test #指向数据库 必填项
replicate-ignore-db = mysql #指定不要同步的数据库,如果指定了binlog(replicate)-do-db就不用再指定该项
重启数据库 然后在主服务器库中新建一个备份账号;
grant replication slave on *.* to slave@192.168.0.2 identified by 'slave' ; #新建一个备份账号
flush privileges; #更新权限
注释:指向到192.168.0.2的从服务器 给从服务器一个备份账号;账号是salve 密码:slave identity by 代表着密码 账户@从服务器地址 identity by 密码FLUSH TABLES WITH READ LOCK;:先锁定表此备份方式需要在CMD中退出mysql的连接 在 mysql/bin中执行(因为bin文件中有个 mysqldump.exe的文件)
mysqldump --master-data -uroot -p test(需要备份的数据库名) > test.sql
备份成功后 查看主服务器的日志文件信息
show master status \G
以上所有步骤都正确的话,将进行 解表 :unlock tables;
从服务器
配置从服务器的my.ini
在最下面添加
server-id=2 #指定唯一的ID,2至32,必须的,并且不能跟主数据库一样
replicate-do-db=rep_test #指定要同步的数据库,必须的
lower_case_table_names=1 #必须要,否则从数据库只能更新出表 而不能同步表数据
配置登录主数据库的账号和密码等信息;有两种方法: ①:在my.ini中进行配置
master_log_pos = 79;
#主服务器的IP地址
master-host=10.0.0.100
#从服务器连接主服务器的帐号
master-user=slave
#从服务器连接主服务器的帐号密码
master-password='slave'
#主服务器端口
master-port=3306
#同步时间间隔为60秒
master-connect-retry=10
#日志文件
master_log_file = 'mysql-bin.000008',
#master_log_pos = 79;
②:用代码进行配置
change master to master_host='192.168.0.1',master_user='slave',master_password='slave', master_log_file='mysql- bin.000001',master_log_pos=120;
设置主账户的信息;详解: 设置主服务器的IP(192.168.0.1) 设置登录账号(slave 是主服务给此从服务器的账号) 设置登录密码(slave是主服 务器给此从服务器的密码) 备份日志文件名(mysql-bin.000001是mysql默认的格式 主服务器查看状态的File:此参数) master_log_pos (应该是主服务器 show master status \G 查看状态的Position:(int型)(XXX)
配置成功后 ;启用开始配置 start slave;(开始备份从服务器 slave 是固定参数)
查看从数据库信息 :show slave status;
如果出现: Slave_IO_Running: YesSlave_SQL_Running: Yes以上两项都为Yes,那说明没问题了
到此完成; 然后可以去主服务操作 看从服务器是否成功备份;
可以查看URL:http://www.cnblogs.com/shuidao/p/3551238.html
每次停止备份或者备份报错的时候;应该先输入 stop slave停止备份----change 重新配置参数 ---start slave;启动配备------show slave status;
以上方式是配置新的主从的数据库,当数据库中以前有存在数据的时候;是同步不了;
配置旧数据库的主从复制 大部分和上面大同小异
1、编辑主数据库的my.ini文件,加上:
binlog-do-db=landclash(数据库名)
2、将主数据库data目录下需要做主从复制的数据库的同名目录拷贝到从数据库的data目录下
3、在从数据库的my.ini问价,加上一下内容
replicate-do-db=landclash(数据库)
结束:剩下的同步 与上面方法一直
在同一服务器创建两个MySQL的话,做主从同步 很容易发生 UUID错误;此错误更改方法:bin/data/auto.cnf 修改里面的UUID(随便改一个数字即可)
slave status \G 出现找不到表的时候,一般是Position位置对不上;
查看windows主机创建两个数据库 做模拟主从操作:请查看 一个主机创建两个MySQL
网页版浏览器不能根据端口号进行访问数据库;所以推荐使用mysql工具 Navicat
主从同步时需要要到的命令:
*:代表着mysql 或者 mysql的名称
net stop *;停止mysql
net start *;启用mysql
主服务器常用命令:
grant replication slave on *.* to slave@192.168.0.2 identified by 'slave' ; #新建一个备份账号
flush privileges; #更新权限
FLUSH TABLES WITH READ LOCK;:先锁定表
mysqldump --master-data -uroot -p test(需要备份的数据库名) > test.sql
show master status \G :查看主服务器日志信息
unlock tables;:解表
从服务器常用命令:
change master to master_host='192.168.0.1',master_user='slave',master_password='slave', master_log_file='mysql- bin.000001',master_log_pos=120;
设置主账户的信息;详解: 设置主服务器的IP(192.168.0.1) 设置登录账号(slave 是主服务给此从服务器的账号) 设置登录密码(slave是主服 务器给此从服务器的密码) 备份日志文件名(mysql-bin.000001是mysql默认的格式 主服务器查看状态的File:此参数) master_log_pos (应该是主服务器 show master status \G 查看状态的Position:(int型)(XXX)
start slave;(开始备份从服务器 slave 是固定参数)show slave status;:查看配置
stop slave;停止备份
如果想在Slave上忽略一个库的复制,最好不要用binlog_ignore_db这个参数,
尽量使用
binlog-do-db =test #只复制某个库
replicate-do-db =test #只复制某个库
replicate-ignore-db=mysql #不复制某个库
binlog_ignore-db=mysql #不复制某个库