读写分离(集群、主从复制)
用户写数据只往master节点写,而读的请求分摊到各个slave节点上
binlog是实现MySQL主从复制功能的核心组件。master节点会将所有的写操作记录到binlog中,slave节点会有专门的I/O线程读取master节点的binlog,将写操作同步到当前所在的slave节点。
<br>查看 开启 binlog <br><br>show variables like 'log_bin';<br><br>查看binlog日志存放的位置<br><br>show global variables like '%log%';<br><br>查看binlog 日志内容<br><br>show binlog events in 'binlog.000016' ;<br>
主库 配置<br><br><br>#主服务器唯一Id[必填]<br>server-id=1<br>#启用二进制日志[必填]<br>#log-bin=mysql-bin <br>log-bin=D:\work\application\mysql-8.0.27-winx64\data\mysql-bin #开启mysql的binlog日志功能<br>#主机,读写都可以<br>read-only=0<br>#设置不要复制的数据库[可选]<br>#binlog-ignore-db=mysql<br>#设置需要复制的数据库[可选](输数据库名字) <br>#binlog-do-db=dlj<br><br><br>sync_binlog = 1 #控制数据库的binlog刷到磁盘上去 , 0 不控制,性能最好,1每次事物提交都会刷到日志文件中,性能最差,最安全<br>binlog_format = mixed #binlog日志格式,mysql默认采用statement,建议使用mixed<br>expire_logs_days = 7 #binlog过期清理时间<br>max_binlog_size = 100m #binlog每个日志文件大小<br>binlog_cache_size = 4m #binlog缓存大小<br>max_binlog_cache_size= 512m #最大binlog缓存大<br>binlog-ignore-db=mysql #不生成日志文件的数据库,多个忽略数据库可以用逗号拼接,或者 复制这句话,写多行<br>auto-increment-offset = 1 # 自增值的偏移量<br>auto-increment-increment = 1 # 自增值的自增量<br>
从库配置<br>#主从复制配置 <br>#从服务器唯一Id <br>server-id=2 <br>#只读,对拥有super权限的账号是不生效的 <br>read_only = 1<br><br><br>log-bin=D:\mysql-8.0.27-winx64\data\mysql-bin<br>
创建并授权用来做复制的用户<br><br>create user 'liushuai'@'10.133.46.114' IDENTIFIED by 'liushuai';<br><br>ALTER USER 'liushuai'@'10.133.46.114' IDENTIFIED WITH mysql_native_password BY 'liushuai';<br><br>show grants for 'liushuai'@'10.133.46.114';<br><br>GRANT REPLICATION SLAVE ON *.* TO 'liushuai'@'10.133.46.114';<br><br>select * from user where user='liushuai'<br><br>update user set host='%' where user='root';<br><br>select * from user root;<br><br>flush privileges;<br><br>show master status;<br><br><br>create table user33(<br> id VARCHAR(2),<br> name VARCHAR(2),<br> age VARCHAR(2)<br>)<br><br><br>CREATE DATABASE demo5;<br><br>
从库 执行sql<br><br><br>MASTER_HOST :master主机名(或IP地址)<br>MASTER_PORT :mysql实例端口号<br>MASTER_USER:用户名<br>MASTER_PASSWORD:密码<br>MASTER_AUTO_POSITION:如果进行change master to时使用MASTER_AUTO_POSITION = 1,slave连接master将使用基于GTID的复制协议<br>MASTER_RETRY_COUNT:重连次数<br>MASTER_HEARTBEAT_PERIOD:复制心跳的周期<br><br>CHANGE MASTER TO MASTER_HOST='10.133.47.103', MASTER_PORT=3306, MASTER_USER='liushuai', MASTER_PASSWORD='liushuai', MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=1176 ,MASTER_RETRY_COUNT = 60,MASTER_HEARTBEAT_PERIOD = 10000;<br><br><br>start slave;<br><br>stop slave;<br><br>reset master;<br><br>show slave status;<br><br>set global sql_slave_skip_counter =1;<br><br>