Mysql主从同步

Mysql主从同步、读写分离

​ 主从同步是在一个交换节点设立一高精度的基准时钟,通过传输链路把此基准时钟信号送到网中各个从节点,各个从节点利用锁相环技术把本地时钟频率锁定在基准时钟频率上,从而实现网内各节点之间的时钟信号同步

mysql主从同步的核心就在主机的二进制日志(binary log),主机会将写的操作记录在这个日志文件里面。从机开启一条io线程去主机里面读取这个日志,在将读取的结果记录在本机的relay log(中继日志文件)里面,从机的sql线程会去读取这个relay log然后作用在从机上。

mysql的主从同步是异步的,串行化的,并且有延迟的

主从同步配置

1、修改主机配置文件

windows是my.ini,linux是my.cnf或者mysqld.cnf

# 错误日志文件路径
log_error = /var/log/mysql/error.log
#
# Here you can see queries with especially long duration
#log_slow_queries       = /var/log/mysql/mysql-slow.log
#long_query_time = 2
#log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
#       other settings you may need to change.
# 配置server-id
server-id               = 1 
# 配置日志文件路径
log_bin                 = /var/log/mysql/mysql-bin.log 
# 日志的过期时间
expire_logs_days        = 10
# 日志文件最大大小
max_binlog_size   = 100M
# 日志记录的数据库
binlog_do_db            = goods
# 日志忽略的数据库
#binlog_ignore_db       = include_database_name

2、数据库重启,不重启配置文件会不生效

3、授权从库

CRANT REPLICATION slave,reload,super ON *.* TO '用户名'@'从机的ip,可以用%代替所有' IDENTIFIED BY '用户名';
FLUSH PRIVILEGES;

4、查看master状态

SHOW MASTER STATUS;

将当前的File和position记录下来

5、配置从机

log-bin="mysql-bin.log"
# Error Logging.
log-error="DESKTOP-HN63S2H.err"

# Server Id.
server-id=2
# 同步的数据库
replicate-do-db=goods

6、重启从机

7、配置从机同步主机

CHANGE MATSER TO
MASTER_HOST = 'host',
MASTER_USER = 'USER',
MASTER_PASSWORD = 'PASSWORD',
MASTER_PORT = 'PORT',
MASTER_LOG_FILE = '上面记录的file',
MASTER_LOG_POS = '上面记录的position'

8、开启从机同步主机

start slave

9、检验同步状态

show slave status

如果字段Slave_IO_RunningSlave_SQL_Running都是Yes就是正常的,反之,则可以在下面的Error中找到对应的错误。

10、最后物理检验,在主机上进行数据的改动,在去从机上观察现象即可。

读写分离

一般数据库仅仅是读操作的话是不用处理数据差的问题,但是读写操作一起作用在数据库上,就可能发生一些脏读、幻读之类的问题了,一般在这种问题上,我们可以在数据上加锁处理。

但是并发量大的情况下,如10000次里面仅有两次写的操作,其余都是读操作,那么会有9998次的操作加锁是没有必要的,这时候我们可以进行读写分离,将读的操作分布在多个从库,写的操作作用在主库。

posted @ 2020-12-16 17:08  Ivy丶  阅读(96)  评论(0编辑  收藏  举报