CentOS 7.2 安装配置mysql主从服务器
MySQL官方压缩包安装:
1:下载mysql官方版本,此处以目前最新版本5.7.14为例,下载的64位版本文件为:
mysql-5.7.14-linux-glibc2.5-x86_64.tar
2:解压文件
-linux-glibc2.-x86_64.-linux-glibc2.-x86_64.tar -linux-glibc2.-x86_64.tar.gz -linux-glibc2.-x86_64 /data1/mv mysql-5.7.14-linux-glibc2.5-x86_64 mysql
这里/data1是服务器上的挂载扩展点,因此放在该挂载点下,并将解压文件夹改名为mysql
3:创建mysql用户及用户组
groupadd mysql useradd -r -g mysql mysql
这里-r表示该用户为系统用户,不能用于登录,可通过以下查看组及用户信息:
cat /etc/group | grep mysql cat /etc/passwd | grep mysql
4:变更mysql文件夹所属用户及组
chown -R mysql ./mysql chgrp -R mysql ./mysql
5:mysql初始化
cd /data1/mysql ./bin/mysql_install_db --user=mysql --basedir=/data1/mysql --datadir=/data1/mysql/data/
正常情况下会出现如下结果:
-- :: [WARNING] mysql_install_db is deprecated. Please consider switching to mysqld --initialize -- :: [WARNING] The bootstrap log isn't empty: -- :: [WARNING] --05T08::.109112Z [Warning] --bootstrap is deprecated. Please consider using --initialize instead --05T08::.109668Z [Warning] Changed limits: max_open_files: (requested ) --05T08::.109675Z [Warning] Changed limits: table_open_cache: (requested )
6:编辑启动及配置文件
vim /data1/mysql/support-files/my-default.cnf
将配置文件内容按照如下修改:
[client] default-character-set=gbk [mysqld] character-set-server=gbk max_allowed_packet=60MB max_connections= datadir=/data1/mysql socket=/data1/mysql/mysql.sock symbolic-links= sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [mysql] default-character-set=gbk socket=/data1/mysql/mysql.sock [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
也可以将log及pid文件都改为/data1目录(有人反映会遇到/var/run权限不足等问题)。
vim /data1/mysql/support-files/mysql.server
启动文件内修改basedir及datadir内容:
basedir=/data1/mysql datadir=/data1/mysql/data
同时,为了在首次启动后有权限登录mysql,先在启动指令(start)中取消权限验证:
case "$mode" in
'start')
# Start daemon
# Safeguard (relative paths, core dumps..)
cd $basedir
echo $echo_n "Starting MySQL"
if test -x $bindir/mysqld_safe
then
# Give extra arguments to mysqld with the my.cnf file. This script
# may be overwritten at next upgrade.
$bindir/mysqld_safe --datadir=>& &
wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?
# Make lock for RedHat / SuSE
if test -w "$lockdir"
then
touch "$lock_file_path"
fi
exit $return_value
else
log_failure_msg "Couldn't find MySQL server ($bindir/mysqld_safe)"
fi
;;
在mysqld_safe启动指令的参数中,暂时加入“--skip-grant-tables”参数,这一步非常重要,否则会报各种类似错误:
ERROR (): Access denied for user 'root'@'localhost' (using password: YES). ERROR (): Access denied for user 'root'@'localhost' (using password: NO).
即使正确地用mysql临时生成的密码(/root/.mysql_secret)也是如此。
然后将配置文件、启动文件copy至目的地:
cp -af ./my-default.cnv /etc/my.cnf cp -af ./mysql.server /etc/init.d/mysqld
7:配置mysql的环境变量
vim /etc/profile
在末尾添加:
export PATH=$PATH:/data1/mysql/bin
生效环境变量:
source /etc/profile
8:配置mysql启动服务
chkconfig --add mysqld chkconfig --level mysql on chkconfig
正常情况下mysqld已设置为系统服务:
mysqld :off :off :on :on :on :on :off netconsole :off :off :off :off :off :off :off network :off :off :on :on :on :on :off
9:创建自定义的日志目录(可选)
如果之前配置文件中日志目录修改为/data1/mysql/log,则需要手动创建该目录:
mkdir /data1/mysql/log chown -R mysql /data1/mysql/log chgrp -R mysql /data1/mysql/log
10:启动mysql服务
在centOS7中,直接用systemctl启动即可:
systemctl start mysql
11:更改root用户密码并分配远程访问权限
由于之前在start中取消了权限验证,所以现在可以不输入密码直接连上数据库,这里我们先更改root用户密码,并分配远程访问权限,成功后将去除start启动指令中的取消权限验证参数。
mysql -u root mysql
无需验证直接连接mysql,成功后出现mysql>提示符:
mysql> use mysql
mysql> update user set authentication_string=password(') where user='root';
mysql> flush privileges;
mysql> grant all on *.* to root@';
第一行切换当前数据库;
第二行修改root账户密码,这里的“authentication_string”是较新的版本,老版本的密码字段是"password";
第三行刷新权限;
第四行分配远程访问权限给root用户,这里的密码是“123456”。
接下来修改/etc/rc.d/init.d/mysqld文件,去除脚本中start部分的"--skip-grant-tables"参数,并重启mysql服务,取消匿名登录
'start')
# Start daemon
# Safeguard (relative paths, core dumps..)
cd $basedir
echo $echo_n "Starting MySQL"
if test -x $bindir/mysqld_safe
then
# Give extra arguments to mysqld with the my.cnf file. This script
# may be overwritten at next upgrade.
$bindir/mysqld_safe --datadir=>& &
wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?
# Make lock for RedHat / SuSE
if test -w "$lockdir"
then
touch "$lock_file_path"
fi
exit $return_value
else
log_failure_msg "Couldn't find MySQL server ($bindir/mysqld_safe)"
fi
;;
注意 mysqld_safe 启动指令后的 --skip-grant-tables 参数已经删除。
刷新服务文件并重启mysql服务:
systemctl daemon-reload systemctl restart mysql
完成mysql的安装,并且已经可以通过root用户用指定的密码'123456'进行远程访问。
注:如果开启了防火墙,则可通过开启3306端口,或开启mysql服务的方式来配置firewalld:
firewall-cmd --zone=public --add-port=/tcp --permanent firewall-cmd --zone=public --add-service=mysql --permanent firewall-cmd --reload
MySQL主从复制配置:
目标:两台mysql服务器互为主从,达到数据互备的目的。
1:修改mysql配置文件
服务器A配置文件(/etc/my.cnf),在mysqld标签下新增如下内容:
log-bin=/data1/mysql/binlog binlog_format=mixed server-id= slave-skip-errors=,,, read-only= binlog-ignore-db=information_schema binlog-ignore-db=performance_schema binlog-ignore-db=mysql auto-increment-increment= auto-increment-offset= replicate-ignore-db=information_schema replicate-ignore-db=performance_schema replicate-ignore-db=mysql relay_log=/data1/mysql/relaylog log-slave-updates=ON
服务器B配置文件(/etc/my.conf),在mysql标签下新增如下内容:
log-bin=/data1/mysql/binlog binlog_format=mixed server- slave-skip-errors=,,, read-only= binlog-ignore-db=information_schema binlog-ignore-db=performance_schema binlog-ignore-db=mysql auto-increment-increment= auto-increment-offset= replicate-ignore-db=information_schema replicate-ignore-db=performance_schema replicate-ignore-db=mysql relay_log=/data1/mysql/relaylog log-slave-updates=ON
两台服务器的区别在server-id(可用IP最后一节),以及auto-increment-offset上,自增间隔10,offset分别为1,2可保证对不同服务器并发写操作的id不会冲突。
2:mysql服务器备份用户创建及授权
以命令行模式连接服务器A,创建用户repl并授权:
mysql> create user '; mysql> grant replication slave on *.* to '; mysql> flush privileges;
以命令行模式连接服务器B,创建用户repl并授权:
mysql> create user '; mysql> grant replication slave on *.* to '; mysql> flush privileges;
3:重启mysql服务器并设置双机互备
在两台mysql服务器上分别重启mysql服务:
systemctl restart mysql
在mysql服务器A上查看master信息:
mysql> show master status;
一般会看到如下信息:
+---------------+----------+--------------+---------------------------------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+--------------+---------------------------------------------+-------------------+ | binlog. | | | information_schema,performance_schema,mysql | | +---------------+----------+--------------+---------------------------------------------+-------------------+ row in set (0.00 sec)
此时连上服务器B的mysql客户端,配置主服务器:
change master to master_host='server A IP address', master_user='repl', master_password=', master_log_file='binlog.000001', master_log_pos=; start slave;
同理,连接上mysql服务器B的mysql控制台,执行如下指令:
mysql> show master status;
获取服务器B的master信息,类似如下:
+---------------+----------+--------------+---------------------------------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+--------------+---------------------------------------------+-------------------+ | binlog. | | | information_schema,performance_schema,mysql | | +---------------+----------+--------------+---------------------------------------------+-------------------+ row in set (0.00 sec)
此时连上服务器A的mysql客户端,配置主服务器:
change master to master_host='server B IP address', master_user='repl', master_password=', master_log_file='binlog.000002', master_log_pos=; start slave;
到现在,mysql服务器A与服务器B之间已正确配置了双机主从互备,可以通过show slave status指令查看,其中的Slave_IO_Running是否为Connecting,Slave_SQL_Running是否为Yes。
也可以在服务器A上对数据库做出变更,比如create table操作,会在短时间内自动同步至服务器B。
2016-10-9更新:
在mysql控制台执行change master指令有可能由于之前已配置过主从复制而导致失败,此时需要先停止主从复制的相关READ操作:
STOP SLAVE IO_THREAD; STOP SLAVE SQL_THREAD;
之后再执行change master指令即可。同时要注意在变更主从复制配置之前,请先确认主从复制用户的权限及密码正确性,并重启mysql。
同时,mysql的错误日志会提供大量信息。
2016-10-18更新:
在mysql配置文件(默认路径/etc/my.cnf)中,需要通过配置来开启函数脚本执行,同时该配置项也会影响主从复制,如下为典型的错误提示:
Error Code: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
方案1:通过设置全局变量来开启,但重启mysqld后会失效
set global log_bin_trust_function_creators=TRUE
方案2:通过修改mysql配置文件(默认路径/etc/my.cnf),在mysqld配置节中加入配置信息
log_bin_trust_function_creators=true
重启mysqld守护进程即可。
CentOS 7.2 安装配置mysql主从服务器的更多相关文章
- Centos7.0配置MySQL主从服务器
主服务器:192.168.186.131 从服务器:192.168.186.133 主从服务器mysql版本尽量保持一致,安装步骤请阅mysql安装步骤 一.修改主服务器配置文件 # vi /et ...
- 配置mysql主从服务器
参考:https://www.linuxidc.com/Linux/2016-09/135633.htm 一.Master主服务器配置(192.168.1.3) 1.编辑my.cnf(命令查找文件位置 ...
- 在阿里云的CentOS环境中安装配置MySQL、JDK、Maven
Welcome to Alibaba Cloud Elastic Compute Service ! [root@izbp19stm1x1k2io1e7r3tz ~]# rpm -Uvh http:/ ...
- CentOS 7 yum安装配置mysql
首先去官网下载要用的yum源 传送门:http://dev.mysql.com/downloads/repo/yum/ yum源文件:/home/mysql57-community-release-e ...
- CentOS 6.6安装配置LAMP服务器(Apache+PHP5+MySQL)
准备篇: CentOS 6.6系统安装配置图解教程 http://www.osyunwei.com/archives/8398.html 1.配置防火墙,开启80端口.3306端口 vi /etc/s ...
- CentOS 6.5安装配置LNMP服务器(Nginx+PHP+MySQL)
CentOS 6.5安装配置LNMP服务器(Nginx+PHP+MySQL) 一.准备篇: /etc/init.d/iptables stop #关闭防火墙 关闭SELINUX vi /etc/sel ...
- CentOS 6.4安装配置LAMP服务器(Apache+PHP5+MySQL)
这篇文章主要介绍了CentOS 6.4安装配置LAMP服务器(Apache+PHP5+MySQL)的方法,需要的朋友可以参考下 文章写的不错,很详细:IDO转载自网络: 准备篇: 1.配置防火墙,开启 ...
- CentOS 6.3安装配置LAMP服务器(Apache+PHP5+MySQL)
准备篇: 1.配置防火墙,开启80端口.3306端口 vi /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp -- ...
- CentOS 6.5安装配置LAMP服务器(Apache+PHP5+MySQL)的方法
CentOS 6.5安装配置LAMP服务器(Apache+PHP5+MySQL)的方法 准备篇: 1.配置防火墙,开启80端口.3306端口vi /etc/sysconfig/iptables-A I ...
随机推荐
- 使用NSAssert()和NSParameterAssert调试程序
NSAssert: NSAssert()只是一个宏,用于开发阶段调试程序中的Bug,通过为NSAssert()传递条件表达式来断定是否属于Bug,满足条件返回真值,程序继续运行,如果返回假值,则抛出异 ...
- android 网络请求Ⅰ
本章讲述在android开发中,常用的网络请求操作.网络请求利用android基本的HttpURLConnection连接URL和开源网络请求包AsyncHttpClient.本次网络请求以调取天气接 ...
- IOS开发之Bug--遇到一个类型不确定的bug
下面的问题不大,是我在开发中遇到的问题: 然后我就google搜一下这个报错 . 下面就解决了:
- 在 CentOS7 上安装 Tomcat9
在 CentOS7 上安装 Tomcat9 1 通过 SecureCRT 连接到阿里云 CentOS7 服务器: 2 进入到目录 /usr/local/ 中: cd /usr/local/ 3 创建目 ...
- LVS+Keepalived+Squid+Nginx+MySQL主从高性能集群架构部署方案
方案一,在tomcat的workers.properties里面配置相关条件 worker.tomcat.lbfactor= worker.tomcat.cachesize= worker.tomca ...
- asp.net mvc 之旅—— 第三站 路由模板中强大的自定义IRouteConstraint约束
我们在写mvc的时候,经常会配置各种url模板,比如controller,action,id 组合模式,其实呢,我们还可以对这三个参数进行单独的配置,采用的方式自然 就是MapRoute中的const ...
- CGLib动态代理原理及实现
JDK实现动态代理需要实现类通过接口定义业务方法,对于没有接口的类,如何实现动态代理呢,这就需要CGLib了.CGLib采用了非常底层的字节码技术,其原理是通过字节码技术为一个类创建子类,并在子类中采 ...
- MonjaDB —— 基于 Eclipse 的 MongoDB GUI 客户端工具(转载)
原文链接http://www.oschina.net/question/12_59707 MonjaDB 是一个 MongoDB 的 GUI 客户端工具,提供直观的 MongoDB 数据管理的功能,支 ...
- 动手实践 Linux VLAN - 每天5分钟玩转 OpenStack(13)
本节我们来看如何在实验环境中实施和配置如下 VLAN 网络 配置 VLAN 编辑 /etc/network/interfaces,配置 eth0.10.brvlan10.eth0.20 和 brvla ...
- nginx转发会 默认忽略 headers 中name带”_”的
昨天遇到一个很蛋疼的问题,在提供的一个 http api中,有定义了一个"X_AUTH_TOKEN"自定义head,可是请求这个api时带上"X_AUTH_TOKEN&q ...