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_Running
和Slave_SQL_Running
都是Yes
就是正常的,反之,则可以在下面的Error中找到对应的错误。
10、最后物理检验,在主机上进行数据的改动,在去从机上观察现象即可。
读写分离
一般数据库仅仅是读操作的话是不用处理数据差的问题,但是读写操作一起作用在数据库上,就可能发生一些脏读、幻读之类的问题了,一般在这种问题上,我们可以在数据上加锁处理。
但是并发量大的情况下,如10000次里面仅有两次写的操作,其余都是读操作,那么会有9998次的操作加锁是没有必要的,这时候我们可以进行读写分离,将读的操作分布在多个从库,写的操作作用在主库。