Mysql数据库主从复制的部署

it2023-03-01  93

Mysql主从复制

为什么要部署主从复制Mysql支持的复制类型主从复制的原理过程部署主从复制部署环境设置master主服务器 20.0.0.105设置slave从服务器 20.0.0.106设置slave从服务器 20.0.0.107验证

为什么要部署主从复制

在一些企业网站中,后端Mysql 数据库只有一台时,会有以下问题 1)单点故障点,服务不可用 2)无法处理大量的并发数据请求 3)数据丢失

通过部署主从复制解决这一问题 1) 增加Mysql数据库服务器,对数据进行备份,形成主备 2)确保主备Mysql数据库服务器是一样的 3)主服务器宕机了,备份服务器继续工作,数据有保障

Mysql支持的复制类型

基于语句的复制。在主服务器上执行的SQL语句,在从服务器上执行同样的语句。(Mysql默认采用语句的复制,效率比较高)基于行的复制。把改变的内容复制过去,而不是把命令在从服务器执行一遍。混合类型的复制。默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制

主从复制的原理过程

在每个事物更新数据完成之前,master在二进制日志记录这些改变。写入二进制日志完成后,master通知存储引擎提交事务slave(从服务器)将master(主服务器)的Binary log 复制到中继日志,首先slave开始一个工作线程 I/O线程,I/O线程在master上开一个普通的连接,然后开始Binlog dump process,Binlog dump process从master的二进制日志中读取事件,如果已经更上master,它会睡眠并等待master产生新事件。I/O线程将这些日志写入中继日志SQL slave thread(SQL从线程)处理该过程的最后一步,SQL线程从中继日志读取事件,并重放其它事件而更新slave数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。

部署主从复制

部署环境

maser 主服务器 ;ip :20.0.0.105/24slave 从服务器 ;ip :20.0.0.106/24slave 从服务器 ;ip :20.0.0.107/24

已关闭防火墙、核心防护、安装本地yum源、安装mysql数据库、安装ntp

设置master主服务器 20.0.0.105

1、设置时间同步(必须设置)

[root@localhost ~]# ntpdate ntp1.aliyun.com 20 Oct 16:41:19 ntpdate[15677]: the NTP socket is in use, exiting

2、修改主配置文件

[root@localhost ~]# vi /etc/my.cnf .......省略内容 [mysqld] user = mysql basedir = /usr/local/mysql datadir = /usr/local/mysql/data port = 3306 character_set_server=utf8 pid-file = /usr/local/mysql/mysqld.pid socket = /usr/local/mysql/mysql.sock secure-file-priv="" server-id = 11 ####修改主服务器的id号 log_bin = master-bin ####添加master中生成二进制日志的语句 log-slave-updates = true ####给从服务器授权同步,更新二进制日志文件 ...........省略内容 [root@localhost ~]# systemctl restart mysqld ###重启mysql

3、登录 mysql 数据库给从服务器授权

[root@localhost ~]# mysql -uroot -p ......省略内容 mysql> grant replication slave on *.* to 'myslave'@'20.0.0.%' identified by '123456'; Query OK, 0 rows affected, 1 warning (0.01 sec) (允许20.0.0.%网段内的myslave 用户登录所有数据库、数据表) mysql> flush privileges; ####刷新,生成二进制日志文件 Query OK, 0 rows affected (0.00 sec) mysql> show master status; ####查看master的状态 +-------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-------------------+----------+--------------+------------------+-------------------+ | master-bin.000013 | 751 | | | | +-------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)

4、进入data目录下查看刷新出的二进制日志文件

[root@localhost ~]# ls /usr/local/mysql/data auth ib_logfile0 master-bin.000002 master-bin.000007 master-bin.000012 sys auto.cnf ib_logfile1 master-bin.000003 master-bin.000008 master-bin.000013 test bbs ibtmp1 master-bin.000004 master-bin.000009 master-bin.index ib_buffer_pool kfc master-bin.000005 master-bin.000010 mysql ibdata1 master-bin.000001 master-bin.000006 master-bin.000011 performance_schema

设置slave从服务器 20.0.0.106

1、设置时间同步(必须设置)

[root@localhost ~]# ntpdate ntp1.aliyun.com 20 Oct 16:41:28 ntpdate[46953]: the NTP socket is in use, exiting

2、修改主配置文件

[root@localhost ~]# vi /etc/my.cnf .......省略内容 [mysqld] user = mysql basedir = /usr/local/mysql datadir = /usr/local/mysql/data port = 3306 character_set_server=utf8 pid-file = /usr/local/mysql/mysqld.pid socket = /usr/local/mysql/mysql.sock server-id = 22 ####修改slave 的id号 relay-log = relay-log-bin ###添加,开启中继日志 relay-log-index = slave-relay-bin.index ####添加中继日志索引文件 ...........省略内容 [root@localhost ~]# systemctl restart mysqld ###重启mysql

3、登录 slave 中的数据库,配置同步

[root@localhost ~]# mysql -uroot -p ......省略内容 mysql> change master to master_host='20.0.0.105',master_user='myslave',master_password='123456',master_log_file='master-bin.000013',master_log_pos=751; Query OK, 0 rows affected, 2 warnings (0.01 sec) mysql> start slave; Query OK, 0 rows affected (0.01 sec) mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 20.0.0.105 Master_User: myslave Master_Port: 3306 Connect_Retry: 60 Master_Log_File: master-bin.000013 Read_Master_Log_Pos: 903 Relay_Log_File: relay-log-bin.000002 Relay_Log_Pos: 473 Relay_Master_Log_File: master-bin.000013 Slave_IO_Running: Yes Slave_SQL_Running: Yes ............省略内容

设置slave从服务器 20.0.0.107

1、设置时间同步(必须设置)

[root@localhost ~]# ntpdate ntp1.aliyun.com 20 Oct 16:41:32 ntpdate[46992]: the NTP socket is in use, exiting

2、修改主配置文件

[root@localhost ~]# vi /etc/my.cnf .......省略内容 [mysqld] user = mysql basedir = /usr/local/mysql datadir = /usr/local/mysql/data port = 3306 character_set_server=utf8 pid-file = /usr/local/mysql/mysqld.pid socket = /usr/local/mysql/mysql.sock server-id = 33 ####修改slave 的id号 relay-log = relay-log-bin ###添加,开启中继日志 relay-log-index = slave-relay-bin.index ####添加中继日志索引文件 ...........省略内容 [root@localhost ~]# systemctl restart mysqld ###重启mysql

3、登录 slave 中的数据库,配置同步

[root@localhost ~]# mysql -uroot -p ......省略内容 mysql> change master to master_host='20.0.0.105',master_user='myslave',master_password='123456',master_log_file='master-bin.000013',master_log_pos=751; Query OK, 0 rows affected, 2 warnings (0.01 sec) mysql> start slave; Query OK, 0 rows affected (0.00 sec) mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 20.0.0.105 Master_User: myslave Master_Port: 3306 Connect_Retry: 60 Master_Log_File: master-bin.000013 Read_Master_Log_Pos: 903 Relay_Log_File: relay-log-bin.000002 Relay_Log_Pos: 473 Relay_Master_Log_File: master-bin.000013 Slave_IO_Running: Yes Slave_SQL_Running: Yes ............省略内容

验证

1、在master主服务器上创建一个lookupme数据库 2、去slave从服务器验证有没有这个库

slave 20.0.0.106 slave 20.0.0.107 验证都有这个数据库,证明部署主从复制成功。

---------------------------------------------------------------------到此结束。感谢浏览

最新回复(0)