mysql 主从

主服务器发生变化,从服务器马上同步,增删改在主服务器上进行,查询在从服务器上进行

这样就做到了读写分离,数据备份,以及负载均衡

主从同步是基于二进制日志机制

 

有很多种配置主从同步的方法,可以总结为以下的步骤:

1.在服务器上,必须开启二进制日志机制和配置一个独立的id
2.在每一个从服务器上,配置一个唯一的id,创建一个用来专门复制主服务器数据的账号
3.在开始复制进程前,在主服务器上记录二进制文件的位置信息
4.在开始复制之前,数据库中已经有数据,就必须先创建一个数据快照(可使用mysqldump导出数据库,或者直接复制数据文件)
5.配置从服务器要连接的主服务器的ip和登陆授权,二进制日志文件名和位置


如果主服务器数据库中已经有了数据,需要先备份,如何复制到从服务器上,主从上面的数据一样了,才可以配置


mysql备份:
mysqldump -uroot -p 数据库名 > python.sql;

mysql恢复:
连接mysql,创建新的数据库,退出连接,执行下面命令:
mysql -uroot -p 新数据库名 < python.sql;

配置步骤:
1.备份主服务器数据:
在主服务器ubuntu上执行命令: 导出所有表,并且执行导出时所有表不允许写入,防止操作时有数据修改
mysqldump -uroot -pxxx --all-databases --lock-all-tables > ~/master_db.sql

2.在从服务器上恢复数据: 因为导出数据时用了--all-databases包含了所有的数据库和表的创建,所以这里不用再新建数据库,-p后面不需要再指定数据库名
mysql -uroot -pxxx < master_db.sql

3.主服务器编辑mysqld的配置文件,设置log_bin和server-id
sudo vim /ect/mysql/mysql.conf.d/mysqld.cof
找到(可能是在83行和84行,确保这两句没有被注释):
server-id = 1 #主服务器就设置为1,从服务器必须不同,可以用IP地址的最后一位,肯定不会相同
log_bin = /var/log/mysql/mysql-bin.log


4.重启mysql服务器(可以看到跟Mac命令不一样)
sudo server mysql restart


5.从服务器编辑mysqld的配置文件,设置server-id
sudo vim /ect/mysql/mysql.conf.d/mysqld.cof
找到(可能是在83行,确保server-id没有被注释):
server-id = 2 #主服务器设置为1,从服务器必须不同,可以用IP地址的最后一位,肯定不会相同
从服务器上,84行log_bin无需理会,保持注释就可以

6.重启mysql服务器
sudo server mysql restart

7.登陆主服务器,创建账户
mysql -uroot -pxxx
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by '密码';
flush privileges;

8.从服务器
change master to master_host='主服务器ip',master_user='slave',masrt_password='密码',master_log_file='mysql-bin.0006',master_log_pos=590;
注意:master_log_file='mysql-bin.0006',master_log_pos=590
这里的两个值要对应服务器,登陆服务器数据库,执行:
show master status;
在file字段找到master_log_file的值,Position字段找到master_log_pos的值

配置完毕,在从服务器上验证一下:
show slave status \G;

如果在其中找到:
slave_io_running:yes
slave_sql_running:yes
两者都是yes,表示同步成功

 

posted @ 2019-01-29 19:43  greenfan  阅读(111)  评论(0)    收藏  举报