主从之间建立的slave_IO线程:复制master中binlog日志的SQL语句到本机的中继日志(relay-log)中
主从之间建立的slave_SQL线程:执行本机中继日志中的SQL语句
条件:
在建立主从同步之前,主从数据要一样
主库必须开启binlog日志
主库:
step1:启用binlog日志
server_id=序列号(1-255)
log-bin //默认在/var/lib/mysql
step2:重启mysqld服务
systemctl restart mysqld
step3:添加授权用户
>grant replication slave on *.* to 用户@‘客户端地址’ identified by '密码';
查看当前的日志信息:
>show master slave\G;
从库:
step1:启用server_id
server_id=序列号(1-255)
step2:重启mysqld服务
systemctl restart mysqld
step3:在从库上指定主库信息
>change master to
master_host='主机名',master_user='主库授权用户',master_password='授权用户密码',master_log_file='日志文件',master_log_pos=偏移量;【log信息:show master status\G;】
step4:启动slave进程
>start slave;
============== IO:yes
==============SQL:yes
master信息会自动保存到/var/lib/mysql/master.info文件中
如果要更改master信息,需要先 >stop slave;
测试:
step1:在主库上添加访问数据库的普通用户
grant all on *.* to 用户@'客户端地址' identified by '密码';
客户端连接测试:
mysql -h 主库ip -u普通用户 -p普通用户密码
==============》从库查看数据变化
把从库恢复成独立的库 :
step1:进入/var/lib/mysql中删除文件
rm -rf master.info relay-log.info 主机名-relay-bin.xxxxx* 主机名.relay-bin.index
step2:重启mysqld服务
systemctl restart mysqld
>show slave status\G; //验证结果
主从同步模式:
单向复制:主----》从
链式复制:主---》从(log_slave_update)---->从
互为主从:主《----》主
一主多从:
从《-----主-----------》从
报错:Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.
在从库停止复制进程时出现错误,原因是将复制信息记录表中了
解决方法:
step1:drop 备份的 ibd表
>use mysql
>drop table slave_master_info;
>drop table slave_relay_log_info;
>drop table slave_worker_info;
>drop table innodb_index_stats;
>drop table innodb_table_stats;
step2:重新导入
find / -name mysql_system_tables.sql
> source /usr/share/mysql/mysql_system_tables.sql
step3:重启数据库
systemctl restart mysqld