当前位置: 移动技术网 > 科技>操作系统>Linux > mysql主从复制

mysql主从复制

2018年08月24日  | 移动技术网科技  | 我要评论

一 、企业网站单个 mysql 问题分析
在企业网站中,后端 mysql 数据库只有一台时,会有以下问题:单点故障,服务不可
用;无法处理大量的并发数据请求;数据丢失将造成大灾难。
改造办法:
增加 mysql 数据库服务器,对数据进行备份,形成主备。
确保准备 mysql 数据库服务器是一样的
主服务器宕机了,备份服务器继续工作,数据有保障
mysql 主从复制与读写分离是密切相关

一台主服务器可以做多个从服务器,从服务器也可以充当主服务器,再做多个从服务器,以此类推....

二、主从复制原理原理
mysql 主从复制的类型:
·基于语句的复制
·基于行的复制
·混合类型的复制

1、mysql 从服务器开启 i/o 线程,向主服务器请求数据同步(获取二进制日志)
2、mysql 主服务器开启 i/o 线程回应从服务器
3、从服务器得到主的二进制日志写入中继日志
4、从服务器开启 sql 线程将日志内容执行,实现数据同步

三、mysql 主从备份案例

两台centos7服务器

master---192.168.1.46

slave---192.168.1.47

所有服务器关闭防火墙、关闭selinux

建立时间同步环境 , 在主服务器上安装配置 ntp  时间同步服务器

[root@master ~]# yum -y install ntp

[root@master ~]# vim /etc/ntp.conf

22 server 127.127.1.0 // 手动添加此两行内容
23 fudge 127.127.1.0 startum 8

[root@master ~]# systemctl start ntpd

[root@master ~]# chkconfig ntpd on

从服务器上进行时间同步

[root@slave ~]# yum -y install ntpdate

[root@slave ~]# ntpdate 192.168.1.46
23 aug 17:50:14 ntpdate[3407]: adjust time server 192.168.1.46 offset 0.000029 sec
[root@slave ~]# crontab -e

[root@slave ~]# crontab -l

*/5 * * * * /usr/sbin/ntpdate 192.168.1.46

配置 mysql master  主服务器

[root@master ~]# vim /etc/my.cnf

在[mysqld]模块下手动添加

10 log-bin=mysql-bin
11 log-slave-updates=true #手动添加,开启从日志
12 server-id=11

[root@master ~]# systemctl restart mariadb

[root@master ~]# mysql -uroot -p

给从服务器授权

mariadb [(none)]> grant replication slave on *.* to 'myslave'@'192.168.1.%' identified by '123123';
query ok, 0 rows affected (0.00 sec)

mariadb [(none)]> flush privileges;
query ok, 0 rows affected (0.01 sec)

mariadb [(none)]> show master status;
+------------------+----------+--------------+------------------+
| file | position | binlog_do_db | binlog_ignore_db |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 613 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

配置从服务器

[root@slave ~]# yum -y install mariadb-*

[root@slave ~]# vim /etc/my.cnf

10 relay-log=relay-log-bin
11 relay-log-index=slave-relay-bin.index
12 server-id=12 #主从服务器的 server-id  不能相同!

[root@slave ~]# systemctl restart mariadb
[root@slave ~]# mysqladmin -uroot password 123123
[root@slave ~]# mysql -uroot -p123123

mariadb [(none)]> change master to
-> master_host='192.168.1.46', 
-> master_port=3306,
-> master_user='myslave',
-> master_password='123123',
-> master_log_file='mysql-bin.000001',
-> master_log_pos=613;
query ok, 0 rows affected (0.01 sec)

mariadb [(none)]> start slave;
query ok, 0 rows affected (0.00 sec)

mariadb [(none)]> show slave status\g;
*************************** 1. row ***************************
slave_io_state: waiting for master to send event
master_host: 192.168.1.46
master_user: myslave
master_port: 3306
connect_retry: 60
master_log_file: mysql-bin.000001
read_master_log_pos: 613
relay_log_file: relay-log-bin.000002
relay_log_pos: 529
relay_master_log_file: mysql-bin.000001
slave_io_running: yes
slave_sql_running: yes
replicate_do_db:
replicate_ignore_db:
replicate_do_table:
replicate_ignore_table:
replicate_wild_do_table:
replicate_wild_ignore_table:
last_errno: 0
last_error:
skip_counter: 0
exec_master_log_pos: 613
relay_log_space: 821
until_condition: none
until_log_file:
until_log_pos: 0
master_ssl_allowed: no
master_ssl_ca_file:
master_ssl_ca_path:
master_ssl_cert:
master_ssl_cipher:
master_ssl_key:
seconds_behind_master: 0
master_ssl_verify_server_cert: no
last_io_errno: 0
last_io_error:
last_sql_errno: 0
last_sql_error:
replicate_ignore_server_ids:
master_server_id: 11
1 row in set (0.00 sec)

通过查看 slave  状态,确保 slave_io_running: yes slave_sql_running: yes

在 mysql  主服务器创建 test db数据库

[root@master ~]# mysql -uroot -p123123

mariadb [(none)]> show databases;
+--------------------+
| database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| testdb |
+--------------------+
5 rows in set (0.00 sec)

在从服务器查看是否数据同步

[root@slave ~]# mysql -uroot -p123123

mariadb [(none)]> show databases;
+--------------------+
| database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| testdb |
+--------------------+
5 rows in set (0.00 sec)

从服务器复制了主服务器上的数据库,主从复制成功。

 

注意:

若在 从服务器 start slave; 之后发现 slave_io_running: no 、slave_sql_running: yes ,则
需要先 stop slave; 重新 change master to …; 再 start slave;

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网