mysql同步设置

6 篇文章 0 订阅

主库设置

[mysqld]
server_id=1
port=3306

进入主库命令

GRANT REPLICATION SLAVE ON *.* TO 'sync_user'@'10.0.0.1' IDENTIFIED BY 'your_password';

从库设置

[mysqld]
server_id=2
port = 3306
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log_bin = /var/log/mysql/binlog/mysql-bin.log
relay_log = /var/log/mysql/relaylog/mysqld-relay-bin.log

进入主库命令

CHANGE MASTER TO MASTER_HOST='10.0.0.2',MASTER_USER='sync_user',Master_Port=3306,MASTER_PASSWORD='your_password',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=0;
START SLAVE;

初始化库

mysql_install_db --basedir=/usr --datadir=/var/lib/mysql9 --user=mysql

多实例时用到的命令
启动服务

mysqld_multi start 9

结束服务

mysqld_multi stop 9

连接

mysql -S /var/run/mysqld/mysqld3.sock -uroot -p

同步性能影响比较大的两个参数sync_binlog、innodb_flush_log_at_trx_commit

sync_binlog

默认,sync_binlog=0,表示MySQL不控制binlog的刷新,由文件系统自己控制它的缓存的刷新。这时候的性能是最好的,但是风险也是最大的。因为一旦系统Crash,在binlog_cache中的所有binlog信息都会被丢失。

如果sync_binlog>0,表示每sync_binlog次事务提交,MySQL调用文件系统的刷新操作将缓存刷下去。最安全的就是sync_binlog=1了,表示每次事务提交,MySQL都会把binlog刷下去,是最安全但是性能损耗最大的设置。这样的话,在数据库所在的主机操作系统损坏或者突然掉电的情况下,系统才有可能丢失1个事务的数据。但是binlog虽然是顺序IO,但是设置sync_binlog=1,多个事务同时提交,同样很大的影响MySQL和IO性能。虽然可以通过group commit的补丁缓解,但是刷新的频率过高对IO的影响也非常大。对于高并发事务的系统来说,“sync_binlog”设置为0和设置为1的系统写入性能差距可能高达5倍甚至更多。

所以很多MySQL DBA设置的sync_binlog并不是最安全的1,而是100或者是0。这样牺牲一定的一致性,可以获得更高的并发和性能。

innodb_flush_log_at_trx_commit

#If set to 1, InnoDB will flush (fsync) the transaction logs to the
#disk at each commit, which offers full ACID behavior. If you are
#willing to compromise this safety, and you are running small
#transactions, you may set this to 0 or 2 to reduce disk I/O to the
#logs. Value 0 means that the log is only written to the log file and
#the log file flushed to disk approximately once per second. Value 2
#means the log is written to the log file at each commit, but the log
#file is only flushed to disk approximately once per second.

即如果将参数innodb_flush_log_at_trx_commit设置为1,每当事务提交,InnoDB引擎就会将事务日志写入硬盘,这可以完整保证数据库的ACID特性。
如果您觉得这样的保证没有必要,并且你的事务都是比较小的事务(运行时间比较短、逻辑比较简单),你可以将innodb_flush_log_at_trx_commit设置为0或者是2,这样可以减少访问磁盘日志的次数。0意味着日志只写入日志文件,日志文件大约每秒钟向磁盘写一次;2意味着日志在每次事务提交的时候写入日志文件,且大约每秒钟日志文件写入一次磁盘。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰风漫天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值