说明:本实验配置以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 root@10.0.1.173:/root/
scp /root/alldbbackup.sql root@10.0.1.175:/root/

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

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

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

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

修改完后重启数据库
[root@localhost ~]# service mysqld restart

在 Slave服务器授权,启动从库,进行主从库数据同步
[root@localhost ~]# 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、注意安装版本的高危漏洞补丁至最新

转载于:https://blog.51cto.com/8982757/2069248

MySQL编译安装及主从配置相关推荐

  1. mysql 编译安装

    mysql 编译安装 1.创建mysql帐号 [root@localhost ~]# useradd -s /sbin/nologin -M mysql 2.获取安装包 http://mirrors. ...

  2. mysql编译安装原理_MySQL编译安装全过程

    环境介绍 cat /etc/redhat-release uname -a 安装 lrzsz 软件,这个软件和编译安装 mysql 无关,只是为了方便后面通过 xshell 拖拽其他软件 yum -y ...

  3. 安装完MySQL后启动报错_MySQL数据库之mysql编译安装完成后,启动时报错The server quit without updating PID file...

    本文主要向大家介绍了MySQL数据库之mysql编译安装完成后,启动时报错The server quit without updating PID file ,通过具体的内容向大家展现,希望对大家学习 ...

  4. mysql编译卡主_mysql 编译安装以及主从设定

    1. 下载MYSQL源码包至/home/mysql_home. 我下载下来的源码包文件名为:mysql-5.0.45.tar.gz 2. 在/home/mysql_home下,解压. tar zxvf ...

  5. mysql主从配置安装_mysql主从配置完整版(二进制安装)

    系统基础 centos6.5 mysql5.6 防火墙关闭,目录挂载等 fdisk /dev/sdb vgcreate datavg /dev/sdb1 lvcreate -L 99G -n data ...

  6. mysql安装主从配置_MySQL安装与主从配置

    我是ssh远程 配置的:略微有些不同,大家自己斟酌.1.安装MySQLsudo yum install mysql mysql-server sudo chgrp -R mysql /var/ 我是s ...

  7. mysql 5.7.20主从配置_mysql-5.7.20源码安装 + 多实例 + 主从复制

    版本:MySQL-5.7.20 1.更换yum源 wget -O /etc/yum.repos.d/eprl.repo http://mirrors.aliyun.com/repo/epel-6.re ...

  8. mysql 5.5数据库主从配置步骤详解

    上次给大家介绍了mysql 5.1主从搭建配置教程,这次我们来实现mysql 5.5的主从复制,其实大体上配置是差不多的,只有点细微的差别. 系统:centos 5.x 需要的软件包:mysql-5. ...

  9. 编译安装LAMP之配置httpd以FastCGI方式与php整合

    一.编译安装httpd(httpd 2.4.4,相关软件包可到apache官网上下载) # hwclock -s 将软件时间同步为硬件时间,防止安装软件时出错 1.解决依赖关系 httpd-2.4.4 ...

最新文章

  1. 【翻译】将Ext JS Grid转换为Excel表格
  2. SAP的SD模块中客户的销售视图--扩充客户销售范围
  3. webpack window 添加第三方库
  4. [html] 你有使用过meter标签吗?说说它的用途有哪些?
  5. 第48次《中国互联网络发展状况统计报告》
  6. 苹果 5G 掉队?!
  7. Moto X的谷歌基因
  8. 《Flutter 从0到1构建大前端应用》读后感—第9章【插件与混合工程】
  9. jackson json的使用
  10. 如何查看Dll中包含了哪些函数
  11. Mac下Idea快捷键总结(不断更新)
  12. php7.3手册_php7.3.8手册下载
  13. size_t和size_type
  14. 写给零基础小白的网站开发入门
  15. 经纬财富:巴中美联储措辞乐观 白银难突出重围
  16. Encoded password does not look like BCrypt 使用SpringSecurity中BCryptPasswordEncoder做盐值加密时出现错误
  17. 360度全景效果图制作步骤是什么?
  18. Codeforces Round #817 (Div. 4)
  19. 昨日伦镍交易无效静待上海处理结果,橡胶认购大涨,印尼神油强势涨停YP新低2022.3.9
  20. Win10 应用商店打不开,错误代码0x80131500——亲测可用

热门文章

  1. 2009年中国贫富标准线
  2. 世界各国钱币(ZT)
  3. C++实现简易通讯录
  4. Eclipse利用Maven的插件部署web项目到远程tomcat服务器
  5. linux anaconda环境变量配置
  6. AJG(Academic Journal Guide,学术期刊指南)
  7. 剑指offer4:重建二叉树
  8. JS数组方法(forEach()、every()、reduce())
  9. html之marquee详解[转]
  10. webstorm代码行数统计_10万行代码10万年薪,利用python查看自己写了多少代码