如何在 centos linux 中配置 mariadb 复制-亚博电竞手机版

这是一个创建数据库重复版本的过程。复制过程不仅仅是复制一个数据库,同时也包括从主节点到一个从节点的更改同步。但这并不意味着从数据库就是和主数据库完全相同的副本,因为复制可以配置为只复制表结构、行或者列,这叫做局部复制。复制保证了特定的配置对象在不同的数据库之间保持一致。

mariadb 复制概念

备份 :复制可以用来进行数据库备份。例如,当你做了主->从复制。如果主节点数据丢失(比如硬盘损坏),你可以从从节点中恢复你的数据库。

扩展 :你可以使用主->从复制作为扩展亚博vip888的解决方案。例如,如果你有一些大的数据库以及sql查询,使用复制你可以将这些查询分离到每个复制节点。写入操作的sql应该只在主节点进行,而只读查询可以在从节点上进行。

分发亚博vip888的解决方案 :你可以用复制来进行分发。例如,你可以将不同的销售数据分发到不同的数据库。

故障亚博vip888的解决方案 : 假如你建立有主节点->从节点1->从节点2->从节点3的复制结构。你可以为主节点写脚本监控,如果主节点出故障了,脚本可以快速的将从节点1切换为新的主节点,这样复制结构变成了主节点->从节点1->从节点2,你的应用可以继续工作而不会停机。

复制的简单图解示范

开始之前,你应该知道什么是二进制日志文件以及 ibdata1。

二进制日志文件中包括关于数据库,数据和结构的所有更改的记录,以及每条语句的执行了多长时间。二进制日志文件包括一系列日志文件和一个索引文件。这意味着主要的sql语句,例如create, alter, insert, update 和 delete 会放到这个日志文件中;而例如select这样的语句就不会被记录,它们可以被记录到普通的query.log文件中。

ibdata1 简单的说据是一个包括所有表和所有数据库信息的文件。

主服务器配置

首先升级服务器

sudo yum install update -y && sudo yum install upgrade -y

我们工作在centos7 服务器上

sudo cat /etc/redhat-release  centos linux release 7.0.1406 (core)

安装 mariadb

sudo yum install mariadb-server -y

启动 mariadb 并启用随服务器启动

sudo systemctl start mariadb.service sudo systemctl enable mariadb.service

输出如下:

ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'

检查 mariadb 状态

sudo service mariadb status

或者使用

sudo systemctl is-active mariadb.service

输出如下:

redirecting to /bin/systemctl status  mariadb.service mariadb.service - mariadb database server loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled)

设置 mariadb 密码

mysql -u root mysql> use mysql; mysql> update user set password=password("some_root_password") where user='root'; mysql> flush privileges; mysql> exit

这里 some_root_password 是你的 root 密码。 例如我用”q”作为密码,然后尝试登录:

sudo mysql -u root -psome_root_password

输出如下:

welcome to the mariadb monitor.  commands end with ; or /g. your mariadb connection id is 5 server version: 5.5.41-mariadb mariadb server 亚博vip888 copyright (c) 2000, 2014, oracle, mariadb corporation ab and others.

输入 ‘help;’ 或 ‘/h’ 查看帮助信息。 输入 ‘/c’ 清空当前输入语句。

让我们创建包括一些数据的表的数据库

创建数据库/模式

sudo mysql -u root -psome_root_password mysql> create database test_repl;

其中:

test_repl - 将要被复制的模式的名字

输出:如下

query ok, 1 row affected (0.00 sec)

创建 persons 表

mysql> use test_repl;  create table persons ( personid int, lastname varchar(255), firstname varchar(255), address varchar(255), city varchar(255) );

输出如下:

mysql> mariadb [test_repl]> create table persons ( -> personid int, -> lastname varchar(255), -> firstname varchar(255), -> address varchar(255), -> city varchar(255) -> ); query ok, 0 rows affected (0.01 sec)

插入一些数据

mysql> insert into persons values (1, "lastname1", "firstname1", "address1", "city1"); mysql> insert into persons values (2, "lastname2", "firstname2", "address2", "city2"); mysql> insert into persons values (3, "lastname3", "firstname3", "address3", "city3"); mysql> insert into persons values (4, "lastname4", "firstname4", "address4", "city4"); mysql> insert into persons values (5, "lastname5", "firstname5", "address5", "city5");

输出如下:

query ok, 5 row affected (0.00 sec)

检查数据

mysql> select * from persons;

输出如下:

 ---------- ----------- ------------ ---------- -------  | personid | lastname  | firstname  | address  | city  |  ---------- ----------- ------------ ---------- -------  |        1 | lastname1 | firstname1 | address1 | city1 | |        1 | lastname1 | firstname1 | address1 | city1 | |        2 | lastname2 | firstname2 | address2 | city2 | |        3 | lastname3 | firstname3 | address3 | city3 | |        4 | lastname4 | firstname4 | address4 | city4 | |        5 | lastname5 | firstname5 | address5 | city5 |  ---------- ----------- ------------ ---------- ------- 

配置 mariadb 复制

你需要在主节点服务器上编辑 my.cnf文件来启用二进制日志以及设置服务器id。我会使用vi文本编辑器,但你可以使用任何你喜欢的,例如nano,joe。

sudo vi /etc/my.cnf

将下面的一些行写到[mysqld]部分。

log-basename=master log-bin binlog-format=row server_id=1

输出如下:

然后重启 mariadb:

sudo service mariadb restart

登录到 mariadb 并查看二进制日志文件:

sudo mysql -u root -pq test_repl  mysql> show master status;

输出如下:

 -------------------- ---------- -------------- ------------------  | file               | position | binlog_do_db | binlog_ignore_db |  -------------------- ---------- -------------- ------------------  | mariadb-bin.000002 |     3913 |              |                  |  -------------------- ---------- -------------- ------------------ 

记住 : “file” 和 “position” 的值。在从节点中你需要使用这些值

创建用来复制的用户

mysql> grant replication slave on *.* to replication_user identified by 'bigs3cret' with grant option; mysql> flush privileges;

输出如下:

query ok, 0 rows affected (0.00 sec) query ok, 0 rows affected (0.00 sec)

在数据库中检查用户

mysql> select * from mysql.user where user="replication_user"\g;

输出如下:

mysql> select * from mysql.user where user="replication_user"\g; *************************** 1. row *************************** host: % user: replication_user password: *2af30e7aee9bf3af584fb19653881d2d072fa49c select_priv: n .....

从主节点创建 db dump (将要被复制的所有数据的快照)

mysqldump -uroot -psome_root_password  test_repl > full-dump.sql

其中:

some_root_password - 你设置的root用户的密码 test_repl - 将要复制的数据库的名称;

你需要在从节点中恢复 mysql dump (full-dump.sql)。重复需要这个。

从节点配置

所有这些命令需要在从节点中进行。

假设我们已经更新/升级了包括有最新的mariadb服务器的 centos 7.x,而且你可以用root账号登陆到mariadb服务器(这在这篇文章的第一部分已经介绍过)

登录到maria 数据库控制台并创建数据库

mysql -u root -psome_root_password; mysql> create database test_repl; mysql> exit;

在从节点恢复主节点的数据

mysql -u root -psome_root_password test_repl < full-dump.sql

其中:

full-dump.sql – 你在测试服务器中创建的db dump。

登录到maria 数据库并启用复制

mysql> change master to master_host='82.196.5.39', master_user='replication_user', master_password='bigs3cret', master_port=3306, master_log_file='mariadb-bin.000002', master_log_pos=3913, master_connect_retry=10;

其中:

master_host - 主节点服务器的ip master_user - 主节点服务器中的复制用户 master_password - 复制用户密码 master_port - 主节点中的mysql端口 master_log_file - 主节点中的二进制日志文件名称 master_log_pos - 主节点中的二进制日志文件位置

开启从节点模式

mysql> slave start;

输出如下:

query ok, 0 rows affected (0.00 sec)

检查从节点状态

mysql> show slave status\g;

输出如下:

*************************** 1. row *************************** slave_io_state: waiting for master to send event master_host: 82.196.5.39 master_user: replication_user master_port: 3306 connect_retry: 10 master_log_file: mariadb-bin.000002 read_master_log_pos: 4175 relay_log_file: mariadb-relay-bin.000002 relay_log_pos: 793 relay_master_log_file: mariadb-bin.000002 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: 4175 relay_log_space: 1089 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 1 row in set (0.00 sec)

到这里所有步骤都应该没问题,也不应该出现错误。

测试复制

在主节点服务器中添加一些条目到数据库

mysql -u root -psome_root_password test_repl  mysql> insert into persons values (6, "lastname6", "firstname6", "address6", "city6"); mysql> insert into persons values (7, "lastname7", "firstname7", "address7", "city7"); mysql> insert into persons values (8, "lastname8", "firstname8", "address8", "city8");

到从节点服务器中查看复制数据

mysql -u root -psome_root_password test_repl  mysql> select * from persons;   ---------- ----------- ------------ ---------- -------  | personid | lastname  | firstname  | address  | city  |  ---------- ----------- ------------ ---------- -------  ................... |        6 | lastname6 | firstname6 | address6 | city6 | |        7 | lastname7 | firstname7 | address7 | city7 | |        8 | lastname8 | firstname8 | address8 | city8 |  ---------- ----------- ------------ ---------- ------- 

你可以看到数据已经被复制到从节点。这意味着复制能正常工作。希望你能喜欢这篇文章。如果你有任何问题请告诉我们。

展开全文
内容来源于互联网和用户投稿,文章中一旦含有亚博电竞手机版的联系方式务必识别真假,本站仅做信息展示不承担任何相关责任,如有侵权或涉及法律问题请联系亚博电竞手机版删除

最新文章

网站地图