mysql-5.7.22主从复制搭建

mysql7.7.22主从复制

本项目是根据真实环境搭建编写出文档,文档中的目录也是根据自己公司环境所创建。公司原来是一台服务器搭建的数据库(5.7.22),由于业务的扩展需要搭建一台从服务器,减轻主服务器的压力。两台服务器的数据库搭建方法是一样的,就是主从配置时候不一样。

一、  系统版本及安装所需要的环境

系统:Centos7.1两台

Master:192.168.161.141

Slave: 192.168.161.140

安装开发工具,如果你源码安装软件就需要安装这个。

yum -y groupinstall "Development Tools"

安装依赖包

yum -y install openssl* zlib* pcre* ncurses* make cmake vsftpd lrzsz gcc gcc-c++ gcc-g77 flex bison* autoconf automake bzip2-devel zlib-devel ncurses-devel libjpeg-devel libpng-devel libtiff-devel freetype-devel pam-devel openssl-devel libxml2-devel gettext-devel pcre-devel net-snmp-devel curl-devel perl-DBI vixie-cron crontabs wget

检查是否已经有安装的mysql,避免冲突。

rpm -qa | grep mysql

如果系统已安装mysql,进行强制卸载。

rpm -e –nodeps mysql-libs-5.1.73-5.el6_6.x86_64

centos7默认安装了mariadb数据库,将其查询出来卸载掉

rpm –qa  | grep  mariadb

rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64

创建数据库用户组,并将用户加入mysql组。

groupadd mysqlmaster

useradd -g mysqlmaster -m mysqlmaster    ###mysqlmaster这个用户自己定,这边原服务器设置的是mysqlmaster。

一、  进行安装数据库。

下载地址:

https://dev.mysql.com/downloads/mysql/5.7.html#downloads

下载好后使用lrzsz工具软件上传至服务器opt目录下。###不会使用lrzsz工具的可以百度。

解压上传的软件包,MySQL5.7.5之后需要boost库支持。

安装ncurses-develncurses字符终端下屏幕控制的基本库,你在TTY下登录到主机上mysql需要的,所以依赖。

yum –y install ncurses-devel

安装cmake,编译过程检查(mysql5.6版本以上需要用cmake安装,这是必须的,其他软件也可以使用cmake安装但是使用cmake安装的前提是源码包下有没有CMakeLists.txt这个文件,有的话就可以使用cmake .)    ####yum安装依赖的时候,安装了cmake,yum安装的版本太低,百度下载一个高版本的安装。

进行解压安装cmake。

执行cmake脚本。

使用gmake进行编译安装。

删除CMakeCache.txt,不然安装mysql时报错:remove CMakeCache.txt and rerun cmake……

使用find / -name CMakeCache.txt将CMakeCache.txt查询出来删除

删除CMakeCache.txt

创建mysql所需要的文件夹

设置目录属组

mkdir/home/mysqlmdata/    ###此目录用于存放bin-log日志

chmod 755 –R /home/mysqlmdata/

chown –R mysqlmaster:mysqlmaster /home/mysqlmdata/

chmod 755 –R /opt/mysqlmaster/mysqlm/   ####配置文件目录设置权限

chown –R mysqlmaster:mysqlmaster /opt/mysqlmaster/mysqlm/

chmod 755 /home/mysqlm/data      #####此目录用于存放数据的目录。

chown -R mysqlmaster:mysqlmaster /home/mysqlm/data

进行预编译安装

cmake . -DCMAKE_INSTALL_PREFIX=/opt/mysqlmaster/mysqlm -DMYSQL_UNIX_ADDR=/opt/mysqlmaster/mysqlm/mysql_3306.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_DATADIR=/home/mysqlm/data -DMYSQL_USER=mysqlmaster -DMYSQL_TCP_PORT=3306 -DWITHOUT_PARTITION_STORAGE_ENGINE=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/opt/mysql-5.7.22/boost/boost_1_59_0/ -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DWITH_READLINE=ON -DSYSCONFDIR=/opt/mysqlmaster/mysqlm -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 -DCOMPILATION_COMMENT=‘huiteng for mysqlm‘

编译安装,此步骤时间有点长。

测试一下,如果返回不为0,则未完成。

创建mysql配置文件my.cnf

vim my.cnf

(master:)

[client]

#password       = your_password

port            = 3306

socket          = /opt/mysqlmaster/mysqlm/mysql_3306.sock

default-character-set=UTF8

# The MySQL server

[mysqld]

port            = 3306

basedir = /opt/mysqlmaster/mysqlm/

socket          = /opt/mysqlmaster/mysqlm/mysql_3306.sock

datadir         = /home/mysqlm/data

log-error=/home/mysqlm/data/error.log

pid-file=/home/mysqlm/data/mysql.pid

user=mysqlmaster #此处为mysql源码安装的系统用户名

tmpdir=/tmp

log_timestamps = SYSTEM

#explicit_defaults_for_timestamp=1

skip-name-resolve

skip-external-locking

lower_case_table_names=1

server_id=1

binlog_format = row

log_bin_trust_function_creators = 1

log_bin    = /home/mysqlmdata/mysql-bin

log-slave-updates

binlog-do-db=htcoredb

binlog-do-db=htcoretestdb

binlog-ignore-db = mysql

key_buffer_size = 4024M

max_allowed_packet = 256M

max_heap_table_size=256M

tmp_table_size =256M

sort_buffer_size = 128K

read_buffer_size = 4M

read_rnd_buffer_size = 8M

myisam_sort_buffer_size = 64M

thread_cache_size = 64

query_cache_size= 64M

user = mysqlmaster

max_connections=214

max_connect_errors=1024

table_open_cache = 400

expire_logs_days=10

innodb_buffer_pool_size=2G

innodb_file_per_table=1

innodb_log_buffer_size = 32M

innodb_open_files = 800

sync_binlog=0

# 打开慢查询日志功能

slow_query_log = 1

# 超过2秒的查询记录下来

long_query_time = 2

# 记录下没有使用索引的查询

log_queries_not_using_indexes = 0

slow_query_log_file =/home/mysqlm/data/log/slowquery.log

[mysqldump]

quick

max_allowed_packet = 16M

[mysql]

[isamchk]

key_buffer_size = 128M

sort_buffer_size = 128K

[myisamchk]

key_buffer = 128M

sort_buffer_size = 128K

[mysqlhotcopy]

interactive_timeout

设置my.cnf读写执行权限

chmod 777my.cnf

chown  mysqlmaster:mysqlmaster my.cnf

将mysql的库文件路径及输出mysql的头文件加入系统的库文件搜索路径中.注: 此处只需将一个mysql实例的库文件添加到系统库,无需多次添加。

ln -s /opt/mysqlmaster/mysqlm/lib/mysql /usr/lib/mysql

ln -s /opt/mysqlmaster/mysqlm/include/mysql /usr/include/mysql

进入相应实例的安装路径,初始化各自配置脚本

如果指定的data目录不为空,需要删除并重新创建及赋予777权限

初始化数据库

bin/mysqld --initialize --user=mysqlmaster --basedir=/opt/mysqlmaster/mysqlm --datadir=/home/mysqlm/data/ --tmpdir=/tmp

如果没有上图,可以使用,echo  $?   如果返回为0,证明初始化成功。密码的话在err.log日志去查找。

查看/home/mysqlm/data/err.log

复制启动脚本到系统服务

cp /opt/mysqlmaster/mysqlm/support-files/mysql.server /etc/init.d/mysqlmaster

创建log目录,因为初始化数据库时候data不允许有任何文件,所以只能等初始化完毕后在创建。

Mkdir –p /home/mysqlm/data/log/

Chmod 755 –R /home/mysqlm/data/log/

Chown –R mysqlmaster:mysqlmaster /home/mysqlm/data/log/

修改启动脚本。

Vim /etc/init.d/mysqlmaster

先关闭再启动

$cd /opt/mysqlmaster/mysqlm

$bin/mysqld stop

(mysqlmaster实例启动)

/etc/init.d/mysqlmaster start

如果启动失败,查看错误日志。

cd /opt/mysqlmaster/mysqlm/bin

./mysql -u root -p    ###密码是初始化数据库时候的密码。

进去以后可以修改密码。

set password for [email protected]=password(‘123456’)

####5.7.22如果忘记密码,则可以使用以下操作。

####进入my.cnf跳过密码登陆

####在[mysqld]里面添加skip-grant-tables

####在进行登陆的时候回车跳过密码

####登陆成功后切换至mysql数据库

####Use mysql

####给root授权密码

####update mysql.user set authentication_string=password(‘123456‘) where user=‘root‘ and Host = ‘localhost‘;

####刷新密码

####flush privileges;

####quit退出

####关闭数据库找到my.cnf去掉skip-grant-tables

####去掉后启动数据库。使用刚刚设置的密码123456登陆数据库。

二、主从复制配置

从服务器在另一台服务器安装,安装方法一样。

配置主从

修改my.cnf,master主服务器配置。

Server-id,master务器不能跟slave服务器的id一样。

Bin-log日志的路径指定,要有写入权限。

修改my.cnf,slave从服务器配置。

在主库(master)中创建一个用户用于与从库同步的用户名和密码(这里我创建一个slave_user用户,密码为123456),并给slave_user用户授权,以用于主库操作从库。

192.168.161.141(主库master)

192.168.161.140(从库slave)

create user ‘slave_user‘@‘192.168.161.140‘ identified by ‘123.COM!‘;

grant replication slave on *.* to ‘slave_user‘@‘192.168.161.140‘;

flush privileges;

查看用户是否创建成功。

mysql> sele,host from mysql.user;

查看master的状态。

show master status;

这里的mysql-bin.000026,和Position值154,slave配置的时候会用到。

在master创建几个库做测试。

create database htjk;

use htjk

create table test(id int,name varchar(50));

insert into test (id,name) values(1,‘lisi‘);

导出数据。

直接输入命令mysqldump会发现提示命令不存在,是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,自然会找不到命令,并报错。知道了问题的所在,就直接去处理,先用一条find命令查找mysqldump的所载路径。

find  / -name mysqldump

然后再用ln命令链接到/usr/bin下面。

ln -fs /opt/mysqlmaster/mysqlm/bin/mysqldump /usr/bin

mysqldump -u root -p --all-databases --master-data >/root/all.sql

查看所导出的数据。

将数据发送到到slave服务器上面,使数据保持一致。

scp all.sql [email protected]:/tmp

在slave服务器导入master数据。

./mysql -uroot -p < /tmp/all.sql

导入数据成功后查询数据是否正确。

slave> reset slave all   #重新change master to

mysql> change master to

-> master_host=‘192.168.161.141‘,

-> master_user=‘slave_user‘,

-> master_password=‘123.COM!‘,

-> master_log_file=‘mysql-bin.000026‘,

-> master_log_pos=154,

-> MASTER_CONNECT_RETRY=10;

##关于MASTER_CONNECT_RETRY,在主服务器宕机的情况下,从服务器线程重新尝试连接主服务器之前睡眠的秒数。如果主服务器.Info文件中的值可以读取则优先使用,如果未设置,默认为60秒。

启动slave

start slave;

##关闭命令stop slave

##重启命令reset slave

查看slave的状态。

show slave status \G

只要Slave_IO_Running: Yes, Slave_SQL_Running: Yes,主从就搭建成功。若其中一项不为yes,查看mysql的错误日志。

##测试出现问题

Slave_IO_Running: Yes, Slave_SQL_Running: Yes,都为yes,但是数据不同步。

是因为主数据库的my.cnf配置文件,只指定了需要同步的库导致的。

Binlog-do-db=dbname ##

Binlog-ignore-db=mysql #

根据自己公司情况而定,是需要全部同步,还是要只指定的库进行同步。

主从同步配置。

binlog-ignore-db = mysql

binlog-ignore-db=information_schema

binlog-ignore-db=performance_schema

binlog-ignore-db=sys

主从配置完成,你可以想同步哪个数据库就可以同步哪个数据库。

可能不是特别仔细的文档,需要理解的去搭建数据库,如有问题,请多多指教。

原文地址:https://www.cnblogs.com/sxshaolong/p/10297875.html

时间: 2024-11-05 23:30:23

mysql-5.7.22主从复制搭建的相关文章

MySQL数据库运维之主从复制搭建

上篇文章详细介绍了MySQL数据库的单机多实例搭建,本篇文章将在上篇文章的基础上介绍MySQL主从复制过程,其中常见的复制架构有:异步复制,半同步复制及同步复制.常用的复制架构有异步复制及半同步复制! 一.常见的复制架构 1.主主复制(1)结构图: (2)说明:主主复制即复制的两个实例互为主从,两个库中都可以同时读和写:(3)优点: 2.一主一从(1)结构图: (2)说明:指的是在两个数据库实例中,一个实例扮演着主库的角色,另一个实例扮演着从库的角色.这种方案中,从库通常用来作为备份使用,提供服

基于Docker的MySQL主从复制搭建及原理

为什么基于Docker搭建? 资源有限 虚拟机搭建对机器配置有要求,并且安装mysql步骤繁琐 一台机器上可以运行多个Docker容器 Docker容器之间相互独立,有独立ip,互不冲突 Docker使用步骤简便,启动容器在秒级别 利用Docker搭建主从服务器 首先拉取docker镜像,我们这里使用5.7版本的mysql: docker pull mysql:5.7 然后使用此镜像启动容器,这里需要分别启动主从两个容器 Master(主): docker run -p 3339:3306 --

mysql复制主从集群搭建

最近搭了个主从复制,中间出了点小问题,排查搞定,记录下来 1 环境: 虚拟机: OS: centos6.5 Linux host2 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux 服务器IP 192.168.18.66 192.168.18.67 DB: mysql> select version(); +-----------+ | version() | +---

MySQL 5.7.17主从复制实战(一主多从)

MySQL 5.7.17主从复制实战(一主多从) 主从复制的原理: 分为同步复制和异步复制,实际复制架构中大部分为异步复制. 复制的基本过程如下: 1).Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容: 2).Master接收到来自Slave的IO进程的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave 的IO进程.返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master

MySQL5.1版本的主从复制搭建

MySQL5.1版本的主从复制搭建         [备注]: 主机192.168.250.20 备机192.168.250.40 主从复制 1主机上面已经有了MySQL5.1.53-log版. 2备机上没有mysql数据库,需要在备机上安装MySQL5.1.53-log软件,具体参考svn文档"system\mysql\document\IT_SYS_MySQL_Installation.docx". 3再次确定主服务器与从服务器的MySQL版本一致 Showvariables li

项目实战7—Mysql实现企业级数据库主从复制架构实战

Mysql实现企业级数据库主从复制架构实战 环境背景:公司规模已经形成,用户数据已成为公司的核心命脉,一次老王一不小心把数据库文件删除,通过mysqldump备份策略恢复用了两个小时,在这两小时中,公司业务中断,损失100万,老王做出深刻反省,公司也因此对于数据库的性能和可靠性提出更高要求. 要求对数据库进行改造,使其承载力进行提升,故障修复时间减少,有没有能实现的方案呢? Mysql实现数据库主从复制实战架构及其原理 1.实验架构及其原理 数据库高可用架构分为 主从:一主一从,一主多从,一主从

Ubuntu下(Linux+Apache+MYSQL+PHP, LAMP)环境搭建

最近开始玩PHP,于是试着搭建一下开发环境并做个记录,以备日后再使用起来方便可查. 第一步 确保软件包是最新的 <span style="font-size: 18px;">sudo apt-get update</span> 第二步 安装Apache2 <span style="font-size: 18px;">sudo apt-get install apache2</span> 安装之后测试:在浏览器中打开 h

MySQL 5.7下主从复制延迟解决方案

在MySQL下主从复制的延迟问题一直是在业界内比较大的困扰,主从的延迟会因为受到网络磁盘等等相关的因素影响,但其中最主要的影响是就是在master太过繁忙的写入导致slave无法有效的从relay_log中读取到最新的相关记录,这样对于数据实时性很高的业务来说slave的数据并不是最新的有一定的延时,此时使用主从的读写分离就有点显的鸡肋了,不能做到slave上能查到最新的实时数据,大多在slave上都是做一些对实时数据要求并不是很高的一些数据查询. 而到了MySQL的5.6版本开始引入多线程的主

springMVC+angular+bootstrap+mysql的简易购物网站搭建

springMVC+angular+bootstrap+mysql的简易购物网站搭建 介绍 前端的css框架用了bootstrap, 以及bootstrap的JS组件, 以及很好用的angular(angular大法好), 项目一共包含了7个静态界面, 静态界面的数据展示都使用了angularJS , 后端是基于java的spring, 容器为tomcat, 项目代码分享到百度云盘 , 这个项目的优势是, 所有的显示都是在前端完成, 数据交互也是通过ajax完成, 没有频繁的页面跳转:先上两张商