一、Mariabd数据复制原理和功能
Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。
复制的功用:数据分布;负载均衡读;数据备份;高可用和故障切换;MySQL升级测试
二、Mariabd主从复制的实现
主节点(MASTER)配置
①、启动二进制日志、为当前节点设置一个全局惟的ID号
[root@localhost ~]# vim /etc/my.cn log_bin = mysql-bin #启动二进制日志 server_id = 1 #设置服务器ID innodb_file_per_table = ON #设置每表使用单独事务日志 skip-name-resolve #跳过域名解析 [root@localhost ~]# systemctl restart mariadb.service
②、创建有复制权限的用户账号
MariaDB [(none)]> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO ‘wlw‘@‘192.168.0.%‘ IDENTIFIED BY ‘wlw‘; MariaDB [(none)]> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 413 | | | +------------------+----------+--------------+------------------+ #这里二进制日志已经滚到到第三个文件了,前两个文件为数据库初始化创建的mysql管理库等信息,所以我们等一下配置 #配置从的Position只需要从这一刻的413开始即可
从节点(SLAVE)配置
①、启动中继日志、为当前节点设置一个全局惟的ID号
[root@localhost ~]# vim /etc/my.cn relay_log = relay-log #启动中继日志 relay_log_index = relay-log.index read-only = 1 #开启只读模式,此限制对拥有SUPER权限的用户均无效 #如果需要锁定所有用户,可以执行SQL语句(FLUSH TABLES WITH READ LOCK;) server_id = 8 innodb_file_per_table = ON skip-name-resolve
②、配置前查看一下从服务器的状态和是否启动了复制线程
MariaDB [(none)]> SHOW SLAVE STATUS; Empty set (0.01 sec) #这里我们查看从服务器的状态,可以看到还没有配置,为空 MariaDB [(none)]> SHOW PROCESSLIST; +----+------+-----------+------+---------+------+-------+------------------+----------+ | Id | User | Host | db | Command | Time | State | Info | Progress | +----+------+-----------+------+---------+------+-------+------------------+----------+ | 2 | root | localhost | NULL | Query | 0 | NULL | SHOW PROCESSLIST | 0.000 | +----+------+-----------+------+---------+------+-------+------------------+----------+ #可以看到从服务器还没有启动复制线程
③、使用有复制权限的用户账号连接至主服务器,并启动复制线程
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST=‘192.168.0.151‘, MASTER_USER=‘wlw‘, MASTER_PASSWORD=‘wlw‘, MASTER_LOG_FILE=‘mysql-bin.000003‘, MASTER_LOG_POS=413; MariaDB [(none)]> START SLAVE;
④、配置后查看一下从服务器的状态和是否启动了复制线程
MariaDB [(none)]> SHOW SLAVE STATUS\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.0.151 #主服务器IP Master_User: wlw #复制授权的用户 Master_Port: 3306 #主服务器端口 Connect_Retry: 60 #重试时间 Master_Log_File: mysql-bin.000003 #读取二进制的文件 Read_Master_Log_Pos: 413 #读取二进制的开始位置 Relay_Log_File: relay-log.000002 #读取的中继日志文件 Relay_Log_Pos: 529 #读取的中继日志位置 Relay_Master_Log_File: mysql-bin.000003 Slave_IO_Running: Yes #I/O Thread启动 Slave_SQL_Running: Yes #SQL Thread启动 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: 413 Relay_Log_Space: 817 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: 1 MariaDB [(none)]> SHOW PROCESSLIST; +----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+----------+ | Id | User | Host | db | Command | Time | State | Info | Progress | +----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+----------+ | 2 | root | localhost | NULL | Query | 0 | NULL | SHOW PROCESSLIST | 0.000 | | 3 | system user | | NULL | Connect | 404 | Waiting for master to send event | NULL | 0.000 | | 4 | system user | | NULL | Connect | 403 | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL | 0.000 | +----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+----------+ #可以看到启动了两个线程,一个时等待主服务器发送的时间,一个是读取中继日志做同步 [root@c7node1 ~]# ll /var/lib/mysql/master.info -rw-rw----. 1 mysql mysql 75 Nov 8 09:00 /var/lib/mysql/master.info #这个文件保存了主服务器的链接信息,包括账号密码等,下次重启服务会自动通过此文件连接主服务器 [root@c7node1 ~]# cat /var/lib/mysql/relay-log.info ./relay-log.000002 691 mysql-bin.000003 575 #此文件保存从服务器使用的中继日志、POS和主服务器使用的二进制日志、POS,服务器启动也会读取此文件
⑤、测试实验结果,在主服务器创建数据库看从服务器是否自动复制
MariaDB [(none)]> CREATE DATABASE wlw; MariaDB [(none)]> CREATE DATABASE WLW; MariaDB [(none)]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | WLW | | mysql | | performance_schema | | test | | wlw | +--------------------+ #可以看到主服务器创建的数据库从服务器已经自动复制完成
本文出自 “马尔高” 博客,请务必保留此出处http://kgdbfmwfn.blog.51cto.com/5062471/1710690
原文地址:http://kgdbfmwfn.blog.51cto.com/5062471/1710690