原理:简单的说就是主(master)服务器上执行过的操作会被保存在binlog日志里面,从(slave)服务器把他同步过来,然后重复执行一遍,那么它们就能一直同步。详细的可以自行百度或google.
首先准备2台服务器(已安装mysql):
主(master)服务器:192.168.1.1
从(slave)服务器:192.168.1.2
主库(master)配置:
(1) 启动,进入mysql 给从(slave)库创建新用户 账号为'user',密码为'p123456',允许访问的ip为’192.168.1.*‘;
mysql > grant replication slave on *.* to 'user'@'192.168.1.*' identified by 'p123456';
(2)清空日志信息
mysql > show binary logs;//显示日志 mysql > reset master; //清空
从库(slave)配置:
(1)修改mysql配置文件的服务器:service-id //此id为唯一 不可与主库(master)重复,以后若从库(slave)增加也不可重复
# vim /etc/my.cnf 修改 service-id = 2
(2)启动,进入mysql 清空日志信息,跟主库(master)一样
(3)启用复制 让从库(slave)连接master并开始重做主库(master)二进制日志中的事件
mysql > change master to master_host='192.168.1.1',master_user='user',master_password='p123456',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=0;
// master_host 主库(master)ip
// master_user / master_password刚才创建的user和密码
// master_port端口
// master_log_file 日志文件 如果master日志没有被清空,这里就是当前master的日志信息
// master_log_pos 日志文件开始的位置
需要注意的是,默认情况下,会同步该用户下所有的DB,如果想限定哪些DB,有3种思路
1.在主库(master)上的修改配置文件/etc/my.inf中通过参数binlog-do-db、binlog-ignore-db设置需要同步的数据库。
2.在执行grant分配权限操作的时候,限定数据库
3.在slave上限定数据库使用replicate-do-db=dbname
(4)开启slave
mysql > start slave;
(5)确认Slave是否和Mater成功通信。在现实的信息中如果 Slave_IO_Running和Slave_SQL_Running都是yes,则证明配置成功
mysq > show slave stutas\G;
END!!!