缺点:在某些情况下会导致master-slave中的数据不一致(比如:delete from t where a>=4 and t_modified<=’2018-11-10’ limit 1;在主库执行这个语句的时候,如果使用的是a索引,会删除(4,4,’2018-11-10’)这条记录,如果使用的是t_modified的索引则会删除(5,5,’2018-11-09’);所以在执行这条sql语句的时候提示: Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. 由于 statement 格式下,记录到 binlog 里的是语句原文,因此可能会出现这样一种情况:在主库执行这条 SQL 语句的时候,用的是索引 a;而在备库执行这条 SQL 语句的时候,却使用了索引 t_modified。因此,MySQL 认为这样写是有风险的。 sleep()函数, last_insert_id(),以及user-defined functions(udf)等也会出现问题);
# '%'表示允许任意主机连接,mysql_native_password为mysql的一个身份认证插件 create user '用户名'@'%' identified with mysql_native_password by '密码' #分配主从复制权限,ON *.*子句表示MySQL中的所有数据库和所有对象。 grant replication slave on *.* to '用户名'@'%'
change replication source to SOURCE_HOST='主库IP地址',SOURCE_PORT=主库端口号,SOURCE_USER='主库开启主从复制权限的用户',SOURCE_PASSWORD='密码',SOURCE_LOG_FILE='binlog文件名',SOURCE_LOG_POS=1361
mysql8.0.23之前的版本
1
change master to master_host='主库IP地址',master_port=主库端口号,master_user ='主库开启主从复制权限的用户',master_password ='密码',master_log_file ='binlog文件名',master_log_pos = 1361
_log_file和_log_pos通过show master status命令查看
四、开启同步
1 2
start replica; #8.0.22之后 start slave; #8.0.22之前
五、查看主从同步状态
1 2
show replica status; #8.0.22之后 show slave status; #8.0.22之前