MySQL的主从实战

MySQL的主从实战

1、Mysql主从的必要性

访问量不断增减,Mysql服务器的压力增大;就需要对Mysql进行优化与改造;

  • 实现Mysql的高可用
  • MySQL的主从复制搭建
    • 主从搭建的目的就是实现数据库冗余备份
    • 同步主服务器和Slave服务器,一旦Master服务器宕机也有Slave服务器的数据支撑
  • MySQL 的读写分离,
  • MySQL的拆分库、表进行优化

2、MySQL的主从搭建

  • 至少需要两台服务器:Master服务器和Slave服务器;
  • 主从数据同步是一个异步复制的过程
  • 两台服务器都需要开启bin-log日志功能;
    • bin-log日志用于记录在Master库中执行的增、删、修改、更新操作的sql语句;
  • IO线程、SQL线程开启

3、MySQL主从的原理:

  • salve执行start ,slave IO线程通过在Master创建的授权用户链接上至Master,并且请求master
  • Master接收到来自slave IO线程的请求后,master IO线程根据slave发送的指定bin-log日志position点之后的内容,然后返回给slave的IO线程;
  • 返回的信息中除了bin-log日志内容外,还有master最新的binlog文件名以及在binlog中的下一个指定更新position点;
  • 然后Slave服务器收到日志内容并且添加到relay-log文件;更新position记录到Master.info文件中;
  • 最后master与slave两台服务器保持一致;

4、搭建Mysq主从的实验:

  • master :192.168.75.131
  • slave:192.168.75.132
  • 实验中使用的是mariadb服务
#两台服务器都直接安装mariadb
[root@Node1 ~]# yum -y install mariadb-server
  • 主服务器master配置如下:
    • 编辑/etc/my.cnf文件
      • 添加server-id
      • 启用log-bin的日志格式
    • 授权一个用户,用于同步mariadb的数据
#修改配置文件
[root@Node1 ~]# vim /etc/my.cnf
..........[mysqld]的模块下添加
server-id = 131
log-bin = mysql-bin

#添加完成之后启动MySQL服务
[root@Node1 ~]# systemctl start mariadb

#登入mysql-->创建用户
	#这里直接用匿名用户登录,因为只是做实验;
[root@Node1 ~]# mysql
............
MariaDB [(none)]> 

	#创建一个数据库
MariaDB [(none)]> create database LJW;
Query OK, 1 row affected (0.00 sec)
	#授权用户、创建同步用户
MariaDB [(none)]> grant replication slave on *.* to 'tongbu'@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)


#查看主服务器的状态
	#这里要记录起来file的bin-log日志和position的编号-->从服务器需要用到
MariaDB [(none)]> SHOW MASTER status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |      470 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
  • 接下来就是slave服务器的配置
    • 编辑/etc/my.cnf文件
      • 添加server-id–>注意这个server-id是不能与主服务器相同的
    • 在从服务器上指定主服务器的信息
#修改配置文件
[root@Node2 ~]# vim /etc/my.cnf
	#在[mysqld]的位置下添加
.....#这里只需要添加server-id即可-->注意不要和主服务器的id相同
server-id=132

#然后启动mysql
[root@Node2 ~]# systemctl start mariadb
	#登入服务器
[root@Node2 ~]# mysql

#指定主服务器信息
MariaDB [(none)]> change master to
    -> master_host='192.168.75.131',			#指定master的ip
    -> master_user='tongbu',					#指定master的用户
    -> master_password='123456',				#用户的密码
    -> master_log_file='mysql-bin.000003',		#就是主服务器的bin-log号
    -> master_log_pos=470;						#主服务器的position

#启动从服务器,
MariaDB [(none)]> slave start;
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.75.131
                  Master_User: tongbu
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 470
               Relay_Log_File: mariadb-relay-bin.000002
                Relay_Log_Pos: 529
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes							#主要查看这两个yes代表搭建成功
            Slave_SQL_Running: Yes							#主要查看这两个yes代表搭建成功
.....................
  • 到这里搭建已经完成–>进入测试阶段
    • 主服务器创建库和表格
    • 然后从服务器查看
#主服务器创建
MariaDB [(none)]> create database HZM;
Query OK, 1 row affected (0.00 sec)
MariaDB [HZM]> create table t1 (id varchar(20),name varchar(20));
Query OK, 0 rows affected (0.00 sec)

#从服务器查看
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| HZM                |			#这个就是刚创建的HZM的库
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

#主服务器插入数据
MariaDB [HZM]> insert into t1 values ('1',"liangjiawei");
Query OK, 1 row affected (0.00 sec)

#从服务器查看数据
MariaDB [(none)]> use HZM;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [HZM]> select * from t1;
+------+-------------+
| id   | name        |
+------+-------------+
| 1    | liangjiawei |
+------+-------------+
1 row in set (0.00 sec)
  • 到这里实验结束;

猜你喜欢

转载自blog.csdn.net/Liang_GaRy/article/details/130728108
今日推荐