linux 下 mysql 主从配置
话不多说,直接干。
准备条件:安装两个mysql数据库,随便哪个作主库,另一个从库。
1.在主库创建 复制用的账号
grant replication slave ,replication client on *.* to repl@'192.168.125.%' identified by 'repl';
上面创建了账户repl,密码repl,赋予了权限replication slave(必要),replication client(非必要),*.* 意思是任意数据库的任意表。其中的192.168.125.% 表示此用户可以从ip开头为192.168.125的机器上访问主库。
2.配置主库 ,linux下配置文件路径 /etc/my.cnf ,windows下路径:MySQL\MySQL Server 5.7\my-default.ini
打开后编辑,添加 或修改下面两行。
log_bin = master-bin
server_id = 128
server_id 的值随便设,每个数据库唯一。login_bin 指定主库生成的二进制文件的名字
重启 主库的服务,然后登录主库执行 show master status;
出现上面的图表示正常开启,主库配置完毕。
3.配置从库,仍然是my.cnf (linux) ,或 my-default.ini(windows)
添加或修改下面2行:
server_id = 127
relay_log = /var/lib/mysql/mysql-relay-bin
server_id 指定mysql数据库唯一标识,relay-log是指定中继日志(下面解释)的位置和名字
4.启动slave
重启 从库,登录后执行
change master to master_host = '主库ip' ,master_user='repl', master_password='repl', master_log_file='master-bin.000001',master_log_pos=0;
然后使用 start slave; 开启复制。可以通过 show slave status\G; 查看复制信息如下图;
这时候可以登录主库,更改主库数据,看看从库是否同步发生变化。
5.主从如何复制
复制有三个步骤:
1. 主库把数据更改记录在二进制文件(上面的master-bin)中
2.从库 把主库的二进制文件复制到自己的中继日志中。
3.从库读取中继日志并执行。
见上图。实际上,从库会启动一个IO线程与主库建立连接,并获取主库的更新事件,转储到中继日志。同时从库启动一个SQL线程,从中继日志读取记录并执行。既是允许获取事件和重放事件 异步进行。
中继日志可能存在多个(00001,00002....),SQL线程执行完中继日志后会尽快将其删除(通过relay_log_purge参数控制)。