Mysql复制功能提供分担读负载
show variables like 'binlog_format'
set session binlog_format = STATEMENT(直接记录修改时的sql段)
show binary_logs;
flush logs;
show binary logs;
cd /home/mysql/sql_log
ls -lh
mysqlbinlog 日志名
而且对于特定函数如UUID(),USER()非确定函数还是无法复制,而且如果有使用这样的函数,可能会造成MySQL复制的主备服务器数据不一致
mysql5.7默认基于行的日志格式,记录增删改查操作所修改行的信息
主从复制延时的主要原因就是从服务器存放主服务器二进制日志的效率
show variables like 'binlog_row_image';
full:默认值,记录所有的行信息
minimal:只记录要修改列的记录(推荐)
noblob:记录除了blog和text之外(如果blog或者text没有修改的话)的所有字段
mysqlbinlog -vv mysql-bin.000000日志名
minimal,只记录了3的修改
建议ip网段只对存在从服务器的网段来授权
- 启动mysql二进制文件(如果之前没有启动过,需要重启服务器)
- server_id 动态参数,也就是说可以通过set来设置(临时修改),配置文件(永久修改),唯一
- relay_log中继日志进行固定,因为默认是以主机名为中继日志名的
- log_slave_update链路复制(当该从服务器做为其他服务器的主服务器时,必须)
mysqldump 逻辑备份
如果是混合表的话,添加参数--lock-all-tables
备份对数据库需要加锁(影响并发性,在频繁系统,会造成大量的阻塞)
--master-data在备份时,主库当前的二进制文件拼音量的信息(只有使用了这个命令才能在从库使用change_master_to启动主从复制的链路)
第二种方式:
不阻塞服务器的操作,可以在不影响主库的操作下设置从库(InnoDb,最好的方式)
但是混合数据引擎时,同样会对表进行锁操作
--slave-info记录日志信息和日志偏移量信息
more /etc/my.cnf
修改配置后,就开始备份了
主库:
mysqldump --single-transaction --master-data --tirggers --routines --all-databases -uroot -p >> all.sql(前提,mysql版本号一致,如果不一致,就不要备份mysql数据库了)
yum install openssh-clients
主库:
备份到从库
scp .all.sql root@192.168.3.101:/root 传输
从库:
mysql -uroot -p < all.sql
start slave;启动复制链路。
优点:
缺点:
因为每一个服务器的二进制文件都是独立的,很难找到日志点
- source_id执行事务主库的server UUID的值(server UUID是 mysql首次启动自动生成,保存在数据库中的数据目录中)
- 每一个mysql事务的UUID都是不同的
- transaction_id从1开始逐级递增
- 事务:GTID = 1 : 1
- 不要手动在从服务器建立相同的账号,把所有没有在从服务器执行的事务都同步到从上去,会导致启动复制链路时出现错误
数据目录和存放二进制的log目录最好分开(最好分类磁盘分区,会提高磁盘io的提升)
- 从服务器连接主服务器的信息以及中继日志的存储方式,默认存储在文件中
- 存到表中,Innodb存储引擎,如果数据库崩溃,利用Innodb存储引擎的特点,进行崩溃恢复,以保证从服务器可以从正确的位置重新同步主服务器
全部重启数据库服务器
/etc/init.d/mysql restart
show processlist
show slave status
用途
sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。
服务器每次重启都会生成一个新的二进制日志文件
会造成数据差异