MySQL编译安装及主从配置

说明:本实验配置以Cenos6.6和MySQL5.6.35为例

一、编译安装MySQL

1、避免在安装过程中出现问题,先安装系统依赖包
yum install apr autoconf automake bison cloog-ppl cpp curl curl-devel fontconfig fontconfig-devel freetype freetype freetype-devel gcc gcc-c++ gtk+-devel gd gettext gettext-devel glibc kernel kernel-headers keyutils keyutils-libs-devel krb5-devel libcom_err-devel libpng libjpeg libsepol-devel libselinux-devel libstdc++-devel libtool libgomp libxml2 libxml2-devel libXpm libtiff libtiff libX libxml make mpfr ncurses ntp openssl openssl-devel patch pcre-devel perl php-common php-gd policycoreutils ppl telnet t1lib t1lib nasm nasm wget zlib-devel

2、下载MySQL源码包
https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.35.tar.gz

3、创建MySQL安装目录以及数据存放目录
mkdir -p /application/mysql/data

4、创建用户、用户组
groupadd mysql
useradd -g mysql mysql -s /sbin/nologin -M

5、解压MySQL源码包,并编译安装
tar -zxvf mysql-5.6.35.tar.gz
cd ./msyql-5.6.35
cmake -DCMAKE_INSTALL_PREFIX=/application/mysql \
-DMYSQL_DATADIR=/application/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/application/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
make && make install

6、优化调整,并初始化数据库
cp support-files/my-default.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --list mysqld
echo "PATH=$PATH:/application/mysql/bin" >> /etc/profile
source /etc/profile
chown -R mysql:mysql /application/mysql
/application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data --user=mysql

7、启动服务,并设置密码
service mysqld start
mysqladmin -u root password ‘123456‘
mysql -u root -p123456

完成上述步骤,MySQL的安装基本完成

二、MySQL的主从配置
在实际的生成环境中,如果对数据库的读和写都在同一个数据库服务器中操作,无论是在安全性,高可用还是高并发等各个方面都不能完全满足实际需求的,因此一般来说都是通过主从复制(Master-Slave)的方式来同步数据,在通过读写分离来提升数据的高并发负载能力这样的方案来进行部署。

MySQL Replication 概述
MySQL Replication 俗称MySQL AB复制(主从,双机热备),从库以一定的频率去读取主库的二进制日志文件,按照日志中记录对从库进行同样的操作,以达到同步效果。

MySQL 支持的复制类型
基于语句的复制 在主服务器上执行的SQL语句,在从服务器上执行同样的语句,MySQL默认采用基于语句的复制,效率比较高
基于行的复制 把改变的内容复制过去,而不是把命令在从服务器上执行一遍
混合类型的复制 默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用行

复制的工作过程
1.在每个事务更新完数据完成之前,Master在二进制日志(Binary log,binlog)记录这些改变,写入二进制日志完成后,Master通知存储引擎提交事务
2.Slave将Master的Binary log复制到其中中继日志,首先Slave开始一个工作线程-I/O线程在Master上打开一个普通的连接,然后开始Binlog dump process,Binlog dump process从Master的二进制日志中读取事件,如果已经跟上Master,它会催眠并等待Master产生新的事件,I/O线程将这些事件写入中继日志。
3.SQL Slave Thread(SQL从线程)处理该过程的最后一步,SQL线程从中继日志读取事件,并重放其中的事件而更新Slave的数据,使其与Master中的数据一致,只要该线程与I/O线程保持一致,中继日志通常会在OS的缓存中,所以中继日志的开销很小。

复制过程的限制
1.即复制在Slave上是串行化的,也就是说Master上的并行更新不能在Slave上并行操作
2.MYSQL的版本都要高于3.2,还有一个基本的原则就是作为从数据库的数据库版本可以高于主服务器数据库的版本,但是不可以低于主服务器的数据库版本

从库以一定的频率去读取主库的二进制日志文件,按照日志中记录对从库进行同样的操作,以达到同步效果。
MySQL Master IP: 10.0.1.174
MySQL Slave1 IP: 10.0.1.173
MySQL Slave2 IP: 10.0.1.175

每台机器上的操作
service iptables stop
setenforce 0

在主服务器上安装时间同步服务
yum -y install ntp
vim /etc/ntp.conf #添加两行
server 127.127.1.0
fudge 127.127.1.0 stratum 8
service ntpd restart

在从服务器上安装时间同步客户端,并同步时间
yum -y install ntpdate
usr/sbin/ntpdate 10.0.1.174

配置MySQL主服务器(master)
在/etc/my.cnf 中修改或者增加如下内容:
vim /etc/my.cnf
[mysqld]
server-id=1
log-bin=mysql-binlog
log-slave-updates=true

重启mysql服务
service mysqld restart

创建Replication用户
mysql -u root -p123456
mysql> grant replication slave on . to ‘myslave‘@‘10.0.1.%‘ identified by ‘123456‘;
mysql> flush privileges;

获得Master DB的相关信息
mysql> show master status;

供Slave DB连接时使用,记录下File和Position的值

备份的方法有很多,可以直接复制数据文件,也可以使用 mysqldump。本文全新的搭建,所以不存在数据同步的问题
mysqldump -u root -p123456 --all-databases > /root/alldbbackup.sql
scp /root/alldbbackup.sql [email protected]:/root/
scp /root/alldbbackup.sql [email protected]:/root/

在 MySQL Slave 上的配置
从库连接主库进行测试,如果连接成功说明主库配置成功
[[email protected] ~]# mysql -u myslave -p123456 -h 10.0.1.174

导入备份脚本
[[email protected] ~]# mysql -u root -p < /root/alldbbackup.sql

修改MySQL配置文件
[[email protected] ~]# vim /etc/my.cnf
server-id = 2
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index

配置多个从服务器时依次设置server-id号

修改完后重启数据库
[[email protected] ~]# service mysqld restart

在 Slave服务器授权,启动从库,进行主从库数据同步
[[email protected] ~]# mysql -u root -p123456

mysql> CHANGE MASTER TO
MASTER_HOST=‘10.0.1.174‘,
MASTER_USER=‘myslave‘,
MASTER_PASSWORD=‘123456‘,
MASTER_LOG_FILE=‘mysql-bin.000001‘,
MASTER_LOG_POS=430;

mysql> start slave;
mysql> show slave status\G

参数说明:
mysql> CHANGE MASTER TO
-> MASTER_HOST=‘master_host_name‘, //主服务器的IP地址
-> MASTER_USER=‘replication_user_name‘, //同步数据库的用户
-> MASTER_PASSWORD=‘replication_password‘, //同步数据库的密码
-> MASTER_LOG_FILE=‘recorded_log_file_name‘, //主服务器二进制日志的文件名(前面要求记录的参数)
-> MASTER_LOG_POS=recorded_log_position; //日志文件的开始位置(前面要求记录的参数)

测试主从是否同步成功
可以在Master DB创建一个数据库,或者表,到 Slave DB上看,如果配置成功就可以成功同步的

主库查看当前存在的库
mysql> show databases;

从库查看当前存在库
mysql> show databases;

主库创建库,表:
mysql> create database test2;
mysql> use test2
mysql> create table new(name char(20),phone char(20),age int(8));

打开从库,查看:
mysql> show databases;

报错解决方法:
ERROR 1201(HY000):Could now initialize master info structure; more error messages can be found in the MySQL error log

stop slave;
reset slave;
CHANGE MASTER TO MASTER_HOST=‘192.168.3.254‘, MASTER_USER=‘slave‘, MASTER_PASSWORD=‘123456‘, MASTER_LOG_FILE=‘mysql-binlog.000003‘, MASTER_LOG_POS=246;

start slave;

数据不同步解决办法:
mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)

mysql> set global sql_slave_skip_counter=1;
Query OK, 0 rows affected (0.00 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

主从数据库相关命令:
slave stop; slave start; 开始停止从数据库。
show slave status\G 显示从库状态信息
show master status\G 显示主库状态信息
purge master logs to ’binlog.000004’; 此命令非常小心,删除主数据库没用的二进制日志文件。如果误删除,那么从库就没有办法自动更新了。
change master; 从服务器上修改参数使用

另外,如果你当前操作的从库以前曾经与其他服务器建立过主从关系,你可能会发现即使你在my.cnf文件中即便更改了主服务器的位置,但是MSQL仍然
在试图连接就旧的主服务器的现象。发生这种问题的时候,我们可以通过清除master.info这个缓存文件或者在mysql中通过命令来进行设置。方式如下:

删除master.info方法
这个文件位于数据文件存放目录里,可以直接将其删除,然后重新启动服务器。

b、mysql命令方法
如果你不方便重新启动服务器的话,那么就只能使用mysql命令来帮助你做到。

首先登录到主服务器上,查看当前服务器状态:
mysql> show master status\G;

1.FLUSH TABLES WITH READ LOCK
这个命令是全局读锁定,执行了命令之后所有库所有表都被锁定只读。一般都是用在数据库联机备份,这个时候数据库的写操作将被阻塞,读操作顺利进行
解锁的语句是unlock tables
2.LOCK TABLES tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE}
这个命令是表级别的锁定,可以定制锁定某一个表。例如: lock tables test read; 不影响其他表的写操作。
解锁语句也是unlock tables。
这两个语句在执行的时候都需要注意个特点,在退出mysql终端的时候都会隐式的执行unlock tables。也就是如果要让表锁定生效就必须一直保持对话

P.S. MYSQL的read lock和wirte lock
read-lock: 允许其他并发的读请求,但阻塞写请求,即可以同时读,但不允许任何写。也叫共享锁
write-lock: 不允许其他并发的读和写请求,是排他的(exclusive)。也叫独占锁

  1. flush table tablename


多实例配置:
[mysqld]
datadir=/var/lib/mysql3307
socket=/var/lib/mysql/mysql3307.sock
port=3307
[mysqld_safe]
log-error=/var/log/mysqld3307.log
pid-file=/var/run/mysqld/mysqld3307.pid

bin/mysql_safe --defaults-file=/var/lib/mysql3307/my.cnf & #以我们指定的my.cn配置文件为要求,启动mysq实例
netstat -tanp | grep 3307,即可看到mysql已经在监听3307端口了
/bin/mysql -uroot -p -h127.0.0.1 -P3307,连入mysql



生产环境的基本安全优化
1、开启have_openssl
2、限制IP登录
授权用户root使用密码jb51从指定ip为10.0.1.25的主机连接到mysql服务器:
GRANT ALL PRIVILEGES ON . TO ‘root‘@‘10.0.1.25‘ IDENTIFIED BY ‘jb51‘ WITH GRANT OPTION;
flush privileges;
3、限制超时锁定策略,应设置为10分钟
修改配置文件中的“wait_timeout”参数项为600
4、关闭MySQL对本地文件的存取,设置local infile =0
5、分配目录所属组、目录权限分配为755,日志、配置文件、目录分配权限为750
6、需限制连接用户数量(根据业务需求设置)
7、启用历史记录保护,将/etc/my.cnf中配置操作日志存放路径,删除.bash_history、.mysql_history
8、禁止多余用户zipkin等
9、注意安装版本的高危漏洞补丁至最新

原文地址:http://blog.51cto.com/8982757/2069248

时间: 2024-10-29 11:28:26

MySQL编译安装及主从配置的相关文章

Linux服务器集群架构部署搭建(六)数据库服务器MySQL编译安装及主从同步配置(1)

命运是大海,当你能够畅游时,你就要纵情游向你的所爱,因为你不知道狂流什么会到来,卷走一切希望与梦想. 作者:燁未央_Estelle声明:测试学习,不足之处,欢迎指正. 第一章 数据库企业应用场景 1.1 数据库的企业应用 MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性.MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言.MySQL软件采用了双授权政策,它分为社区版和商业版,由于其体积小.速度快.总

开发人员学Linux(7):CentOS7编译安装PHP并配置PHP-FPM

1.前言上一篇讲述了如何编译安装MySQL,虽然可以通过yum install 或者rpm来安装,但是yum install和rpm安装有一个特点,就是有些参数是别人根据大众需求定制的,如果需要进行自己的特定参数指定,这个是比较难做到的,因此有一定Linux基础的人都是编译安装或者根据公司的具体环境制作适合环境的安装包.上一篇的例子中讲述了如何编译安装和如何配置多实例,并在最后讲述了如何配置主从复制配置.以前开源开发经常将LAMP,就是Linux+Apache+MySQL+PHP,对于一些起步型

mysql编译安装(详细)(转载)

mysql编译安装(详细) 一.编译安装MySQL前的准备工作 安装编译源码所需的工具和库 yum install gcc gcc-c++ ncurses-devel perl 安装cmake,从http://www.cmake.org下载源码并编译安装 wget http://www.cmake.org/files/v2.8/cmake-2.8.10.2.tar.gz tar -xzvf cmake-2.8.10.2.tar.gz cd cmake-2.8.10.2 ./bootstrap ;

Linux(centos)下mysql编译安装教程

Linux下mysql编译安装教程 #查看linux发行版本号 cat /etc/issue #查看linux内核版本 uname -r 本文测试环境centOS6.6 一.Linux下编译安装MySQL前的准备工作 在线安装编译源码所需的工具和库(无法联网的话要事先准备软件,或者系统盘) yum install gcc gcc-c++ ncurses-devel perl 从mysql5.5起源代码编译需要借助cmake这款编译工具.从http://www.cmake.org下载cmake源码

关系型数据库之Mysql编译安装及数据库基础(一)

一.为什么会有数据库呢? 刚开始接触数据库的朋友们,都会问数据库用来干啥的呢?字面表达的意思就是用来存储数据的仓库简称"数据库",在日常生活中我们与数据库相关的事务都是一大把一大把的,例如: 1.我们去做火车的时候需要实名认证,为什么安检人员可以通过我们的身份证就可以查询我们的个人信息呢,因为们都是有户口的群众,在公安居民信息库都录入着我们的信息,而们的信息也是存储在国家公民的信息库里面的,这也是我们所说的数据库,早期最传统的数据库就是文本文件,没当查询数据时都需要从头到尾把整个文件都

Redis安装、主从配置及两种高可用集群搭建

Redis安装.主从配置及两种高可用集群搭建 一.            准备 Kali Linux虚拟机 三台:192.168.154.129.192.168.154.130.192.168.154.131 用户名/密码:root/... ssh设置 修改sshd_config文件,命令为:vim /etc/ssh/sshd_config 将#PasswordAuthentication no的注释去掉,并且将NO修改为YES //kali中默认是yes 将PermitRootLogin wi

mysql的安装和基本配置

一.mysql的安装和基本配置 1 安装cmake #./configure#make &&make install 2 安装mysql# yum install ncurses* bison*   # cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/database/mydata -DSYSCONFDIR=/etc -DTMPDIR=/tmp -DWITH_INNOBASE_STORAGE_ENGINE=1 -

DNS2之bind安装、主从配置同步、子域创建、view配置

主DNS配置从服务器: 我们知道,DNS服务器在网络服务中可能出现故障当机等状况,会导致DNS服务瘫痪,显然在实际的网络应用中我们不希望出现这种状况,所有我们就要配置从服务器来在主DNS服务器出现故障时代替他来工作,然而作为价格昂贵的服务器本身你又不希望出现这种极大的浪费,所有从服务器在实际工作中是和主服务器共同分担DNS解析任务的,这样既解决了服务器故障导致的问题,还可以缓解DNS服务器的压力. 那么要配置一个从服务器我们又该怎么做呢? 前提:我们要为本地配置一个从服务器aolens2.从服务

Ubuntu编译安装Php,配置时出现:Configure: error: XML configuration could not be found

解决这个问题是需要安装libxml, sudo apt-get install libxml2-dev Ubuntu编译安装Php,配置时出现:Configure: error: XML configuration could not be found,布布扣,bubuko.com