【运维笔记】linux+mysql实现主从复制、主主复制(详细步骤)

1、部署:

1.1、 环境:
    系统:centos6.5
    mysql版本:MariaDB-10.3.18
1.2、清单:
    虚拟主机1:192.168.10.88 数据库版本:MariaDB-10.3.18
    虚拟主机2:192.168.10.99 数据库版本:MariaDB-10.3.18
1.3、安装数据库:
    Linux/Windows 安装mariadb,并添加/卸载到window服务,跟随系统启动


2、准备工作:

2.1、linux查看mysql目录:

[root@LinuxCentOS6 /]# which mysql
/usr/bin/mysql

2.2、linux查看配置文件位置:

[root@LinuxCentOS6 /]# /usr/bin/mysql --verbose --help | grep -A 1 'Default options'
Default options are read from the following files in the given order:
/etc/my.cnf ~/.my.cnf 

这个信息的意思是: 服务器首先读取的是/etc/my.cnf文件,如果前一个文件不存在则继续读~/.my.cnf文件,如若还不存在依此类推;如若没有配置文件可自行百度以下。


3、配置主从复制:

3.1、 在主机192.168.10.88上配置主服务器

3.1.1、备份主服务器原有数据到从服务器:

[root@LinuxCentOS6 /]# mysqldump -uroot -p --all-databases --lock-all-tables > /data/mysql_data/master_db.sql

说明:

  • -u :用户名
  • -p :示密码
  • –all-databases :导出所有数据库
  • –lock-all-tables :执行操作时锁住所有表,防止操作时有数据修改
  • /data/mysql_data/master_db.sql :导出的备份数据(sql文件)位置,可自己指定任意位置

3.1.2、修改mysql配置文件,在配置文件相应位置添加如下内容,命令:vi /etc/my.cnf.d/server.cnf

[root@LinuxCentOS6 /]# vi /etc/my.cnf.d/server.cnf
#
[server]
#...
[mysqld]
#...
[galera]
#...
[mariadb-10.3]
#...
#------------------------------- mysql主从复制配置:主数据库配置 -------------------------------
[mysqld]
skip_name_resolve = ON
innodb_file_per_table = ON
server-id = 88
log-bin = master-bin
log-bin-index=master-bin.index
#-----------------------------------------------------------------------------------------------
~                                                                                                
~                                                                                                
~                                                                                                
-- INSERT --

说明:

  • server-id:区分从库的编号,必须唯一(可以停服修改)
  • innodb_file_per_table:拆分表数据存储
  • log-bin:开启二进制日志

备注:保存上一个编辑界面,按ESC键,再执行shift+英文冒号键,输入:wq按回车保存

3.1.3、重启mysql,执行命令:service mysql restart

root@LinuxCentOS6 /]# service mysql restart
Shutting down MariaDB.                                     [  OK  ]
Starting MariaDB.191016 14:27:38 mysqld_safe Logging to '/var/lib/mysql/LinuxCentOS6.err'.
191016 14:27:38 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
                                                           [  OK  ]
[root@LinuxCentOS6 /]# 

3.1.4、执行命令:mysql -uroot -p123456,登入主服务器192.168.10.88中的mysql:

[root@LinuxCentOS6 /]# mysql -uroot -p123456

3.1.5、执行如下SQL语句,创建用于从服务器同步数据使用的帐号,并刷新数据库权限:
1)创建名为slave的备份账号:GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by 'slave';
2)刷新数据库权限:FLUSH PRIVILEGES;

mysql [(none)]>
mysql [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by 'slave';
Query OK, 0 rows affected (0.000 sec)
mysql [(none)]>
mysql [(none)]> FLUSH PRIVILEGES;
mysql [(none)]>
Query OK, 0 rows affected (0.000 sec)

3.1.6、获取主服务器的二进制日志信息:SHOW MASTER STATUS;

mysql [(none)]> SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 |      329 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.000 sec)

File为使用的日志文件名字,Position为使用的文件位置,这两个参数须记下,配置从服务器时会用到


3.2、在主机192.168.10.99上配置从服务器

3.2.1、修改mysql配置文件,在配置文件相应位置添加如下内容,命令:vi /etc/my.cnf.d/server.cnf

[root@LinuxCentOS6 /]# vi /etc/my.cnf.d/server.cnf
#
[server]
#...
[mysqld]
#...
[galera]
#...
[mariadb-10.3]
#...
#------------------------------- mysql主从复制配置:从数据库配置 -------------------------------
[mysqld]
skip_name_resolve = ON
innodb_file_per_table = ON
server-id = 99
relay_log = slave_relay_bin
#-----------------------------------------------------------------------------------------------
~                                                                                                
~                                                                                                
~                                                                                                
-- INSERT --

说明:

  • server-id:区分从库的编号,必须唯一

备注:保存上一个编辑界面,按ESC键,再执行shift+英文冒号键,输入:wq按回车保存

3.2.2、重启mysql,执行命令:service mysql restart
3.2.3、执行命令:mysql -uroot -p123456,登入从服务器192.168.10.99中的mysql
3.2.4、执行如下SQL语句,设置连接到master主服务器:

mysql [(none)]> change master to master_host='192.168.10.88',master_user='slave',
master_password='123456',master_log_file='master-bin.000001',master_log_pos=329;

说明:

  • 测试从库是否能连接上主库mysql -uslave -p123456 -h192.168.10.88
  • master_host:主服务器Ubuntu的ip地址
  • master_log_file: 前面查询到的主服务器日志文件名
  • master_log_pos: 前面查询到的主服务器日志文件位置

3.2.5、开启同步SQL:

mysql [(none)]> start slave;

注:关闭同步语句stop slave;

3.2.6、查看同步状态SQL:

mysql [(none)]> show slave status;

注:查询结果中包含这两项,即表示成功:
Slave_IO_Running:Yes
Slave_SQL_Running:Yes


3.3、测试主从同步:

4.1.1、测试,在主服务器上创建库,创建表,插入数据,可以在从服务器上看到数据被同步过来:

CREATE DATABASE test_db CHARACTER SET utf8 COLLATE utf8_general_ci;
USE test_db;
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of t_user
-- ----------------------------
INSERT INTO `t_user` VALUES ('1', '张三');
INSERT INTO `t_user` VALUES ('2', '李四');
INSERT INTO `t_user` VALUES ('3', '王五');

测试结果:两个数据库都有名为test_db库以及t_user表和三条数据

----------------------------------- 192.168.10.88主数据库 -----------------------------------
mysql [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| test_db            |
+--------------------+
6 rows in set (0.000 sec)

----------------------------------- 192.168.10.99主数据库 -----------------------------------
mysql [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| test_db            |
+--------------------+
6 rows in set (0.000 sec)


























注:以上内容仅提供参考和交流,请勿用于商业用途,如有侵权联系本人删除!


持续更新中…

如有对思路不清晰或有更好的解决思路,欢迎与本人交流,QQ群:273557553
你遇到的问题是小编创作灵感的来源!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值