在centos上创建MariaDB/Mysql主从(Master/Slave)
Posted 石头那家伙
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在centos上创建MariaDB/Mysql主从(Master/Slave)相关的知识,希望对你有一定的参考价值。
MariaDB/mysql内建的复制功能是构建大型,高性能应用程序的基础。将MySQL的数据分布到多个系统上去,这种分布的机制,是通过将MySQL的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。
今天介绍下,如何在centos上搭建一套测试环境。
0. 环境准备:
vm1:10.211.55.46,做master
vm2:10.211.55.47,做slave
其上分别安装了centos7.
安装MariaDB/Mysql
sudo yum install mariadb-server mariadb
sudo systemctl enable mariadb
sudo systemctl start mariadb
为数据库用户创建密码
MariaDB [(none)]> SET PASSWORD = PASSWORD('admin');
此时,root的密码为admin
在vm1(master)上做配置
a. 修改配置文件,命令:vim /etc/my.cnf,输入下列码:
innodb_file_per_table=NO
log-bin=/var/lib/mysql/master-bin
binlog_format=mixed
server-id=46 #即IP的后两位
b. 重启服务
sudo systemctl restart mariadb.service
c. 登录mariaDB并赋予复制的权限
[will@CentOS7-1 ~]$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 52
Server version: 5.5.56-MariaDB MariaDB Server
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'root'@'10.211.55.%' IDENTIFIED BY 'admin';
d. 记录主库log文件及其当前位置,记住File和Position的部分,从服务器会用到
MariaDB [(none)]> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 | 2012 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
在vm1(master)上创建一个database、table等。
MariaDB [(none)]> create database testdb;
MariaDB [(none)]> use testdb;
MariaDB [(none)]> create table MyClass(id int(4) not null primary key auto_increment,name char(20) not null,sex int(4) not null default '0',degree double(16,2));
MariaDB [testdb]> insert into MyClass(id) values('1');
MariaDB [testdb]> insert into MyClass(id) values('2');
MariaDB [testdb]> insert into MyClass(id) values('3');
MariaDB [testdb]> insert into MyClass(id) values('4');
MariaDB [testdb]> select * from MyClass;
+----+------+-----+--------+
| id | name | sex | degree |
+----+------+-----+--------+
| 1 | | 0 | NULL |
| 2 | | 0 | NULL |
| 3 | | 0 | NULL |
| 4 | | 0 | NULL |
+----+------+-----+--------+
4 rows in set (0.00 sec)
在vm2(slave)上做配置
a. 修改配置文件,命令:vim /etc/my.cnf,输入下列码:
innodb_file_per_table=NO
server-id=47 #即IP的后两位
relay-log=/var/lib/mysql/relay-bin
b. 重启服务
sudo systemctl restart mariadb.service
c. 登录mariaDB并赋予复制的权限
[will@CentOS7-2 ~]$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 52
Server version: 5.5.56-MariaDB MariaDB Server
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>CHANGE MASTER TO MASTER_HOST='10.211.55.46',MASTER_USER='root', MASTER_PASSWORD='admin', MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=2012;
这个命令完成以下几个任务:
设置当前服务器为主服务器(10.211.55.46)的从库
提供当前数据库(从库)从主库复制数据时所需的用户名和密码,即上面的GRANT REPLICATION SLAVE ON *.* TO 'root'@'10.211.55.%' IDENTIFIED BY 'admin';
指定从库开始复制主库时需要使用的日志文件和文件位置,即上面主库执行SHOW MASTER STATUS;显示结果中的File和Position
d. 开启主从复制,并查看slave的状态
MariaDB [(none)]> slave start;
MariaDB [(none)]> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.211.55.46
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 2209
Relay_Log_File: relay-bin.000002
Relay_Log_Pos: 924
Relay_Master_Log_File: master-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: 2209
Relay_Log_Space: 1212
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: 46
1 row in set (0.00 sec)
注意:结果中Slave_IO_Running和Slave_SQL_Running必须为Yes,如果不是,需要根据提示的错误修改。
最后,就可以做一些简单的测试,比如说在master使用第4步创建的datatable,然后加入一条信息,查看信息是否复制到了slave上。
以上是关于在centos上创建MariaDB/Mysql主从(Master/Slave)的主要内容,如果未能解决你的问题,请参考以下文章
centos通过yum安装mariadb(mysql)无法启动服务或者找不到mysql.sock
CentOS通过yum安装MariaDB(MySQL)无法启动服务或者找不到mysql.sock