centos7搭建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-devel,ncurses是字符终端下屏幕控制的基本库,你在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 root@localhost=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 root@192.168.161.140:/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
主从配置完成,你可以想同步哪个数据库就可以同步哪个数据库。
可能不是特别仔细的文档,需要理解的去搭建数据库,如有问题,请多多指教。
centos7搭建mysql-5.7.22主从复制的更多相关文章
- 搭建 MySQL 5.7.19 主从复制,以及复制实现细节分析
主从复制可以使MySQL数据库主服务器的主数据库,复制到一个或多个MySQL从服务器从数据库,默认情况下,复制异步; 根据配置,可以复制数据库中的所有数据库,选定的数据库或甚至选定的表. Mysql ...
- MySQL(14)---Docker搭建MySQL主从复制(一主一从)
Docker搭建MySQL主从复制(一主一从) 上一篇博客写了MYSQL主从复制原理 : MySQL(13)---MYSQL主从复制原理 这篇我们来写 Docker搭建MYSQL主从复制(一主一从) ...
- 两主机搭建MySQL主从复制后,show slave status显示:Last_IO_Error: error connecting to master ……
两台主机A.B搭建mysql主从复制关系(A为master,B为slave)后,在slave上执行show slave status,结果中显示Last_IO_Error: error connect ...
- [置顶] 两主机搭建MySQL主从复制后,show slave status显示:Last_IO_Error: error connecting to master ……
两台主机A.B搭建mysql主从复制关系(A为master,B为slave)后,在slave上执行show slave status,结果中显示Last_IO_Error: error connect ...
- Linux CentOS 安装MySql以及搭建MySql主从复制
前言 在之前的博客中,有过几篇都写了关于mysql在linux下的搭建教程,可能以后还会再写,但是又不想重复在写, 于是便想单独将此抽出来,单独写成一篇博客,并详细记录一些安装过程以及遇到的问题解决办 ...
- Vmware搭建LNMP环境(Centos7+Nginx+Mysql+PHP7.1.8)
参考:1.Linux学习之CentOS(一)----在VMware虚拟机中安装CentOS 7(图文教程) 2.Centos7搭建LNMP环境 3.MySQL5.7修改默认root密码 4.CentO ...
- Linux - centos7 下 MySQL(mariadb) 和 主从复制
目录 Linux - centos7 下 MySQL(mariadb) 和 主从复制 MySQL(mariadb) 安装MySQL(mariadb) 配置数据库的中文支持 在远程用 mysql客户端去 ...
- Docker搭建MySQL主从复制
Docker搭建MySQL主从复制 主从服务器上分别安装Docker 1.1 Docker 要求 CentOS 系统的内核版本高于 3.10 [root@localhost ~]# uname -r ...
- 基于keepalived搭建MySQL的高可用集群
MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,MHA和 ...
随机推荐
- 导出txt格式的说明书
/// <summary> /// 说明书 /// </summary> /// <returns></returns> public FileResu ...
- iOS常用的加密方式
MD5 iOS代码加密 创建MD5类,代码如下 #import <Foundation/Foundation.h> @interface CJMD5 : NSObject +(NSStri ...
- Objective-C学习笔记(十九)——对象方法和类方法的相互调用
事实上在OC的对象方法(减号方法)和类方法(加号方法)并非相互独立的,它们也能够发生千丝万缕的关系,今天我们来研究下它们两者相互调用的问题.该样例还是以People类为基础. (一)对象方法调用类方法 ...
- 开发ActiveX控件调用另一个ActiveX系列1——开发一个MFC ActiveX控件
ActiveX开发的教程有很多,我也从中受益匪浅,例如以下这几篇: 基本教程:http://www.cnblogs.com/guenli/articles/1629915.html 注意事项:http ...
- 基于togglepoolmember.pl编写F5设备控制模块
为了方便利用python对F5设备进行操作,本文将togglepoolmember.pl对F5设备的控制写成了python模块,源代码例如以下: #!/usr/bin/python # -*- cod ...
- IE8 "开发人员工具" 无法使用,无法显示
经常使用IE8开发工具的开发人员可能会遇到这么一种去情况:按F12时任务栏里出现开发人员工具的任务,但是开发人员工具窗体不弹出,也不出现在IE8里,重装IE88后还是存在此问题. 解决办法其实非常简单 ...
- erlang中字符编码转换(转)
转自:http://www.thinksaas.cn/group/topic/244329/ 功能说明: erlang中对各种语言的编码支持不足,此代码是使用erlang驱动了著名的iconv编码库来 ...
- markdownPad2 绿色破解版安装
markdownpad2,默认为markdown传统风格,不能编辑分行的代码段,可以在设置里改为Github 风格,但需要付费激活,以下是绿色安装包,附激活方法 下载地址 https://pan.ba ...
- CGI的基本原理
一.基本原理 CGI:通用网关接口(Common Gateway Interface)是一个Webserver主机提供信息服务的标准接口.通过CGI接口,Webserver就行获取client提交的信 ...
- OpenStack 使用Ceph 配置指导
概述 Ceph 作为分布式文件系统,不但具有高可靠性.高扩展性.高性能. 也是统一存储系统.支持对象存储.块存储.文件存储,本文介绍怎样使用Ceph 块存储作为OpenStack的Glance.Nov ...