实现mysql主从复制
主从复制(也称 AB 复制)允许将来自一个MySQL数据库服务器(主服务器)的数据复制到一个或多个MySQL数据库服务器(从服务器)
MySQL中复制的优点包括:
1、横向扩展解决方案 - 在多个从站之间分配负载以提高性能。在此环境中,所有写入和更新都必须在主服务器上进行。但是,读取可以在一个或多个从设备上进行。该模型可以提高写入性能(因为主设备专用于更新),同时显着提高了越来越多的从设备的读取速度。
2、数据安全性 - 因为数据被复制到从站,并且从站可以暂停复制过程,所以可以在从站上运行备份服务而不会破坏相应的主数据。
3、分析 - 可以在主服务器上创建实时数据,而信息分析可以在从服务器上进行,而不会影响主服务器的性能。
4、远程数据分发 - 您可以使用复制为远程站点创建数据的本地副本,而无需永久访问主服务器。
原理图
配置 Replication
配置步骤:
在主服务器上,您必须启用二进制日志记录并配置唯一的服务器ID。需要重启服务器。
编辑主服务器的配置文件 my.cnf,添加如下内容
[mysqld]
log-bin=/var/log/mysql/mysql-bin
server-id=1
创建日志目录赋予权限,并修改主机名,进行本地解析
有些时候会搞不清在哪台服务器上进行解析,因此主从都配置本地解析
mkdir /var/log/mysql
chown mysql.mysql /var/log/mysql
vi /etc/hosts
ip mysql-slave1
保存退出
关闭selinux,防火墙
setenforce 0
systemctl stop firewalld
重启服务
systemctl restart mysqld
注意:
如果省略server-id(或将其显式设置为默认值0),则主服务器拒绝来自从服务器的任何连接。
为了在使用带事务的InnoDB进行复制设置时尽可能提高持久性和一致性,
您应该在master my.cnf文件中使用以下配置项:
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
确保未在复制主服务器上启用skip-networking选项。
如果已禁用网络,则从站无法与主站通信,并且复制失败。
应该创建一个专门用于复制数据的用户
每个从站使用MySQL用户名和密码连接到主站,因此主站上必须有用户帐户,从站可以使用该帐户进行连接。
master 上的任何账户都可以用于复制的操作,前提是必须先被授权。
创建一个仅具有复制过程权限的单独帐户,以最大程度地降低对其他帐户的危害。
例如,要使用新用户 repl 可以从任何主机上连接到 master 上进行复制操作, 并且用户 repl 仅可以使用复制的权限。
在 master 上执行如下操作
CREATE USER 'repl'@'%' IDENTIFIED BY '123';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
mysql>
在从服务器上进行本地解析,使用刚才的用户进行测试连接
vi /etc/hosts
ip mysql-master1
保存退出
mysql -urepl -p'123' -hmysql-master1
下面的操作根据如下情况继续
主服务器中有数据
如果在启动复制之前有现有数据需要与从属设备同步,请保持客户端正常运行,以便锁定保持不变。这可以防止进行任何进一步的更改,以便复制到从站的数据与主站同步。
在主服务器中导出先有的数据
如果主数据库包含现有数据,则必须将此数据复制到每个从站。有多种方法可以实现:
要选择转储数据库的适当方法,请在以下选项之间进行选择:
使用mysqldump工具创建要复制的所有数据库的转储。这是推荐的方法,尤其是在使用时 InnoDB。
如果数据库存储在二进制可移植文件中,则可以将原始数据文件复制到从属数据库。这比使用mysqldump并在每个slave上导入文件更有效,因为它会INSERT在重放语句时省略更新索引的开销 。InnoDB 不建议这样做。
mysqldump -uroot -p密码 --all-databases --master-data=1 > dbdump.db
这里的用户是本机服务器的用户
从主服务器中使用 scp 或 rsync 等工具,把备份出来的数据传输到从服务器中。
在主服务中执行如下命令
scp dbdump.db root@mysql-slave1:/root/
这里的 mysql-slave1 需要能在主服务器中 ping 通。
配置从服务器,并重启
在从服务器上编辑其配置文件 my.cnf 并添加如下内容:
// my.cnf 文件
[mysqld]
server-id=2
导入数据到从服务器,并配置连接到主服务器的相关信息
在从服务器上操作
方式一:
导入数据
mysql -uroot -p < /root/fulldb.dump
在从服务器上配置连接到主服务器的相关信息
进入从服务执行如下操作:
mysql> CHANGE MASTER TO
MASTER_HOST='mysql-master1',
MASTER_USER='repl',
MASTER_PASSWORD='123',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
注意上面的 mysql-bin.000001 是你 mysqldump 后的备份文件中出现的文件名。
而 154 也是需要参照 mysqldump 文件中的内容。
比如:
cat /root/fulldb.dump
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154;
启动从服务器的复制线程以开始复制
mysql> start slave;
Query OK, 0 rows affected (0.09 sec)
检查是否成功
在从服务上执行如下操作
mysql> show slave status\G
完结
作者:alvenhhh
来源:csdn
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。