0
点赞
收藏
分享

微信扫一扫

架构师之路-学渣到学霸历程-85

程序员阿狸 2024-12-02 阅读 19

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,亲爱的朋友们:

  • 感谢你们耐心完这个笔记,如果笔记中出现的一些软件包、资源找不到的可以直接留言&私聊,我看见了就回复;
  • 资源免费共享;有需要滴滴,(仅仅是我有的)

我的坚持初衷:💕立志要成为一名架构师

  • 不断地去坚持学,其中的各种各样的难度,不言而喻~!
  • 坚持不是一件容易的事情,但它却是成功的关键。做起来吧~!

如果你也想要坚持:那么组团吧,咋们一块互相监督;一天一点分享也是进步;最怕就是孤军奋战!加油吧,追梦人~!

举报

相关推荐

0 条评论