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
你遇到的问题是小编创作灵感的来源!