通过MySQL复制可以实现读写分离,将读操作分布到多个不同的服务器上,减轻服务器的压力。当主库遇到故障,系统可以切换到从库,实现故障切换。
在主库上把数据更改记录到二进制日志(Binary Log)中。
备库将主库上的日志复制到自己的中继日志(Relay Log)中。
备库读取中继日志中的事件,将其在备库上重新执行一遍。
创建复制账号repl,并赋予replication slave权限create user 'repl'@'10.145.1.%' identified by 'Repl123!@#';grant replication slave on *.* to 'repl'@'10.145.1.%';用命令 whereis my.cnf 找到my.cnf文件的位置,然后用vim打开这里的log_bin为日志文件名,自己取一个名词, server_id 只要唯一就行。systemctl restart mysqld 重启mysql可以看到file那一列变成了mysql-bin.000001,配置成功。relay_log = /var/lib/mysql/mysql-realay-binlog_bin默认情况下会使用机器名命名,这里设成和主库相同的名称,当然也可以设置成其他名称。relay_log指定中继日志的位置和名字,log_slave_updates允许备库将其重放事件记录到自身的二进制文件中,read_only会阻止没有权限的线程修改数据。这里其实只有server_id是必填项,其他都是选填的。重新进入MySQL,使用change master to命令开始复制:change master to master_host='10.145.1.17',master_password = 'Repl123!@#',master_log_file = 'mysql-bin-000001',输入命令show slave status\G;查看状态Slave_IO_Running: Connecting用show grants for 'repl'@'10.145.1.%';命令查看,权限已经授予成功了。Could not find first log file name in binary log index file在网上搜了一下,在主服务器上运行flush logs;后查看最新的bin-log变成了mysql-bin.000002。我把mysql-bin.000002写成了mysql-bin-000002!我去,心好累啊。。。在主数据库上运行 show processlist\G;显示了来自10.145.1.22的连接,并等待更多的更新。在从数据库上show processlist\G;第一次show tables没数据,第二次show tables的时候已经同步了主数据库上的数据,也就有了数据。自此主从复制设置完成,最后感慨一句,做程序员,细心真的很重要啊。。。
原文作者:编程我也会;如有侵权,请联系管理员删除。