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 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

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

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

最新文章

  1. 【python】面向对象
  2. ROS实时采集Android的图像和IMU数据
  3. final .....finally ...... 和Finalize ......区别
  4. SMTP协议--在cmd下利用bat命令行发送邮件
  5. WIN7 X64 解决无法安装IE11,以及无法点击微软升级包MSU的问题
  6. OC:面向对象的编程思想、基本的知识点总结、强,弱引用
  7. iCloud 包括文稿与数据、日历、提醒事项、 通讯录、备忘录、Safari书签
  8. 解决CentOS 5.8在虚拟机环境下如何桥接上网
  9. java web每天定时执行任务(四步轻松搞定)
  10. Java学习笔记--脚本语言支持API
  11. java接口与抽象类
  12. flink-conf.yaml
  13. redis jedis使用
  14. [20170612]FOR ALL COLUMNS SIZE repeat(12c).txt
  15. node基础—模块系统
  16. 20155324 《Java程序设计》实验三 敏捷开发与XP实践
  17. MCNN多层神经网络论文笔记
  18. document.domain 实现跨域
  19. MT【201】折线计数
  20. centos7,Python2.7安装request包

热门文章

  1. ios控件自定义指引
  2. SQL Server排序的时候使null值排在最后
  3. 转jmeter 性能测试 JDBC Request (查询数据库获取数据库数据) 的使用
  4. 11-BeautifulSoup库详解
  5. GIT简单使用——多人协作篇
  6. MagicZoom bug-Strict Standards: Only variables should be assigned by reference Error
  7. C#如何遍历数组?
  8. android假设给TextView或EditText的email链接加下划线,并在点击在email连接上能够弹框显示
  9. H2 database 操作操作内存表
  10. webstorm vscode 常用设置