MySQL的主从实战
今天要分享的就是MySQL的主从实验;
了解一下主从配置的原理,文字类型的比较难懂;其实实验也就几个步骤;
跟着敲和跟着走就能试验出来;gogogo~!
1、MySQL的实验规划:
- master:192.168.75.70
- slave:192.168.75.71
2、了解mysql主从的工作原理
master操作:
- 当master数据发生变化时,该事件变化会按照顺序写入bin-log中。当slave链接到master时,master会为slave开启binlog dump线程。
- 当master的bin-log发生变化时,bin-log dump线程会通知slave,并将相应的binlog内容发送给slave。
slave操作:
- 从库生成两个线程,一个I/O线程,一个SQL线程 。
- I/O线程请求主库的bin-log,并将得到的bin-log日志写到relay log(中继日志) 文件中。
- SQL线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,达到最终数据一致的目的
主从复制的整个过程如下:
- MySQL之间数据复制的基础是二进制日志文件(binlog)
- MySQL数据库一旦启用二进制日志后,库中所有写操作都会以“事件”的方式记录在二进制日志中
- 其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化。
- 若发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,
- 然后slave的一个SQL线程会把相关的“事件”执行到自己的数据库中,
- 以此实现从数据库和主数据库的一致性,也就实现了主从复制。
3、配置master端配置
- 安装好mariadb的数据库
- 修改配置文件
#安装mariadb数据库
[root@LInux0 ~]# yum -y install mariadb-server mariadb
#修改好配置文件-->这里注意要在[mysqld]指令段里头输入以下配置
[root@LInux0 ~]# vim /etc/my.cnf
[mysqld]
log-bin=Linux0 #指定log-bin
server-id=1 #指定server-id,这两个都是添加的
datadir=/var/lib/mysql
.........
#启动mysql
[root@LInux0 ~]# systemctl start mariadb
#查看一下进程
[root@LInux0 ~]# ps -ef | grep mysqld
#查看端口号
[root@LInux0 ~]# netstat -antlup | grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1534/mysqld
- 登录数据库,查看配置是否生效
- 这里的配置尽量简便;不要设定什么密码以免有什么报错啥的;
- 宗旨就是先跑通后变通
#登录数据库
[root@LInux0 ~]# mysql
.......
MariaDB [(none)]>
#检查一下log_bin是否已经开启;从原理得知:
#主要是两个维度:binlog一定是要启动的,还有一个sql_log-bin
#确保这两样都是on的状态就没有问题了;
MariaDB [(none)]> show variables like "%log_bin";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
| sql_log_bin | ON |
+---------------+-------+
2 rows in set (0.00 sec)
#然后进入数据库;查看一下配置是否生效-->看到这个文件代表已经创建成功了;
MariaDB [(none)]> show master logs;
+---------------+-----------+
| Log_name | File_size |
+---------------+-----------+
| Linux0.000001 | 30334 |
| Linux0.000002 | 1038814 |
| Linux0.000003 | 245 |
+---------------+-----------+
3 rows in set (0.00 sec)
- 授权数据库;
- 创建授权的账号的密码
#创建一个数据库
MariaDB [(none)]> create database ljw charset utf8;
Query OK, 1 row affected (0.00 sec)
#直接授权从库-#然后master服务器需要授权从服务器来读取这个二进制文件
MariaDB [(none)]> grant replication slave on *.* to "liangjiawei"@"192.168.75.71" identified by "123456";
Query OK, 0 rows affected (0.00 sec)
#grant是授权;
#replication
#*。*:代表数据库中所有的数据库以及表格
#“liangjiawei”:这个是用户,后面是密码
#检查一下状态
MariaDB [(none)]> show master status;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| Linux0.000003 | 500 | | |
+---------------+----------+--------------+------------------+
1 row in set (0.00 sec)
4、slave服务器配置
- 安装mariadb
- 修改配置文件
#直接安装mariadb
[root@Linux1 ~]# yum -y install mariadb-server mariadb
#修改配置文件
[root@Linux1 ~]# vim /etc/my.cnf
[mysqld]
server-id=2 #只需要添加这个server-id即可,如果互为主从就要开启binlog文件
datadir=/var/lib/mysql
...........
#启动mariadb
[root@Linux1 ~]# systemctl start mariadb
- 登录mariadb
- 指定master
#登录mariadb
[root@Linux1 ~]# mysql
.......
MariaDB [(none)]>
#指定master
MariaDB [(none)]> change master to
-> master_host="192.168.75.70", #指定mater的ip
-> master_user="liangjiawei", #刚才在master授权的用户liangjiawei
-> master_password="123456", #这个不用说了liangjiawei的Miami
-> master_log_file="Linux0.000003", #这个就是show master status出来的file文件
-> master_log_pos=500; #这个就是开始同步的位置
Query OK, 0 rows affected (0.00 sec)
- 启动同步
- 并且查看slave状态
#启动从库
MariaDB [(none)]> slave start;
Query OK, 0 rows affected (0.00 sec)
#然后查看是否同步
MariaDB [(none)]> show slave status\G
.........
#这里主要是两个指标;必须为yes
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
.......
#到这里基本搭建完成
5、验证数据同步
- 在主库中创建数据库
- 然后查看从库是否同步
#主库操作:
#登录数据库,创建zabbix的数据库
MariaDB [(none)]> create database zabbix charset=utf8;
Query OK, 1 row affected (0.00 sec)
#然后查看主库是否有zabbix
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| ljw |
| mysql |
| performance_schema |
| test |
| zabbix |
+--------------------+
6 rows in set (0.00 sec)
- 从库验证一下数据是否同步
#查看自己的数据库-->这里就可以发现刚才操作的zabix数据库已经同步过来了;
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| zabbix |
+--------------------+
5 rows in set (0.00 sec)
Slave_IO_Running: No
分享环节:
hi,亲爱的朋友们:
- 感谢你们耐心完这个笔记,如果笔记中出现的一些软件包、资源找不到的可以直接留言&私聊,我看见了就回复;
- 资源免费共享;有需要滴滴,(仅仅是我有的)
我的坚持初衷:💕立志要成为一名架构师
- 不断地去坚持学,其中的各种各样的难度,不言而喻~!
- 坚持不是一件容易的事情,但它却是成功的关键。做起来吧~!
如果你也想要坚持:那么组团吧,咋们一块互相监督;一天一点分享也是进步;最怕就是孤军奋战!加油吧,追梦人~!