源码安装mysql,及主从同步

源码安装mysql

[可选] 如果用源码安装cmake软件:

cd /home/oldboy/tools/

tar xf cmake-2.8.8.tar.gz

cd cmake-2.8.8

./configure

#CMake has bootstrapped.  Now run gmake.

gmake

gmake install

cd ../

依赖包安装(这里直接可以用yum安装cmake)

# yum install cmake gcc gcc-c++ gcc-g77 autoconf automake zlib* fiex* libxml* ncurses-devel libmcrypt* libtool-ltdl-devel* bison.i686 glibc -y

# useradd mysql -s /sbin/nologin -M

# id mysql    操作前备份,操作后检查.

安装mysql

tar zxf mysql-5.5.32.tar.gz 

cd mysql-5.5.32

cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.32
-DMYSQL_DATADIR=/application/mysql-5.5.32/data
-DMYSQL_UNIX_ADDR=/application/mysql-5.5.32/tmp/mysql.sock
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii
-DENABLED_LOCAL_INFILE=ON
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_FEDERATED_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1
-DWITHOUT_PARTITION_STORAGE_ENGINE=1
-DWITH_FAST_MUTEXES=1
-DWITH_ZLIB=bundled
-DENABLED_LOCAL_INFILE=1
-DWITH_READLINE=1
-DWITH_EMBEDDED_SERVER=1
-DWITH_DEBUG=0

没有提示,是最好的结果.

# echo $?  查看是否预编译成功

# make&&make install

# ln -s /application/mysql-5.5.32/ /application/mysql

# mkdir -p /data/{3306,3307}/data

*   {}     输出字母字符序列(可以用作批量创建)

# tree /data

----------------------------------------

(rz data.zip--->/; 解压后再次tree /data)

查看my.cnf, 其中的socket那一块 是  多实例登陆需要指定socket.

启动脚本中启动和关闭服务的原理:

mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 >/dev/null &

mysqldadmin -u root -poldboy -S /data/3306/mysql.sock shutdown

----------------------------------------

权限控制:

chown -R mysql:mysql /data

find /data -type f -name "my.cnf"|xargs ls -l

find /data -type f -name "mysql"|xargs chmod 700 

find /data -type f -name "my.cnf"|xargs ls -l

echo ‘export PATH=/application/mysql/bin:$PATH‘>>/etc/profile

tail -1 /etc/profile

source /etc/profile

或

ln -s /application/mysql/bin/* /usr/local/sbin/

初始化:

# cd /application/mysql/scripts/
# ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3306/data/ --user=mysql
  *  vi /etc/hosts        如果有警告的话在hosts文件中做一下修改就好了.
# ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3307/data/ --user=mysql

注意一点:

这里我们要注意/tmp的权限.如果初始化失败,注意chmod -R 1777 /tmp ; 删除/data下的内容,然后重新初始化.


启动

(mysql的启动要比web服务是慢的,另外启动后3秒之后才能查看到端口号,脚本里边   sleep 5):

/data/3306/mysql start

/data/3307/mysql start

*启动之后,5秒之后再查端口

netstat -lntup|grep 330

ss -lntup|grep 330

--------------------------

如果 启动有错误,则  可以看一下mysql的错误日志;(辅助查看系统日志/var/log/messages)

 (alias grep=‘grep --color=auto‘)

# grep  log-error /data/3306/my.cnf 

#log-error = /data/3306/error.log

log-error=/data/3306/mysql_oldboy3306.err

查看错误日志最小化 查看:

# grep -i error /data/3306/mysql_oldboy3306.err 

高手都有查看日志的习惯!!!

-------------------------


登陆:

mysql -S /data/3306/mysql.sock

-S 是指定sock文件(这里演示的是一个没有密码的登陆过程.)

设置密码

mysqladmin -uroot password oldboy123 -S /data/3306/mysql.sock 

mysql -uroot -poldboy123 -S /data/3306/mysql.sock 

mysqladmin -uroot password oldboy456 -S /data/3307/mysql.sock 

mysql -uroot -poldboy456 -S /data/3307/mysql.sock 

修改完密码之后,在启动脚本中:

# sed -n ‘13p‘ /data/3306/mysql  

# sed -i ‘13 s#oldboy#oldboy123#g‘ /data/3306/mysql 

# sed -n ‘13p‘ /data/3306/mysql    

# sed -n ‘13p‘ /data/3307/mysql  

# sed -i ‘13 s#oldboy#oldboy456#g‘ /data/3307/mysql

关闭服务器,然后重启.

# /data/3306/mysql stop

# /data/3307/mysql stop

# /data/3306/mysql start

# /data/3307/mysql start

netstat -lntup|grep 330

快速创建mysql实例:

mkdir -p /data/3308/data

\cp /data/3306/my.cnf  /data/3308/

\cp /data/3306/mysql  /data/3308/

sed -i ‘s/3306/3308/g‘ /data/3308/my.cnf 

sed -i ‘s/server-id=1/server-id=8/g‘ /data/3308/my.cnf 

sed -i ‘s/3306/3308/g‘ /data/3308/mysql

chown -R mysql:mysql /data/3308

chmod 700 /data/3308/mysql

cd /application/mysql/scripts

./mysql_install_db --datadir=/data/3308/data --basedir=/application/mysql --user=mysql

chown -R mysql:mysql /data/3308

/data/3308/mysql start

sleep 5

netstat -lnt|grep 3308

启动 和 修改密码:

mysqladmin -uroot password oldboy123 -S /data/3308/mysql.sock 

mysql -uroot -poldboy123 -S /data/3308/mysql.sock

关于mysql.sock文件    及     远程登陆mysql多实例:

1. 本地登录多实例: (需要指定sock文件)

mysql -uroot -poldboy123 -S /data/3308/mysql.sock

mysql.sock文件是mysql服务端与本地mysql客户端进行通信的unix套接字文件.

2.远程登陆mysql多实例:

mysql -uroot -poldboy123
-h 10.0.0.7 -P 3308

远程登陆mysql就不用指定sock文件了,需要-h指定IP和-P 指定端口号.

强调:前提是在10.0.0.7上
对oldboy用户授权.


关于同步:

文件级别同步软件方案:

1、普通同步:scp/sftp/ftp/samba/rsync/csync2(多级同步)/union(双向同步)

2、实时同步:nfs/inotify/sersync/lsyncd

3、文件系统同步:drbd

======================

第三方同步软件:实时的(实时的不一定是同步的,可能异步的):

1、db 自带的同步功能

mysql replication(异步的),oracle dataguard

redis主从复制,mongodb

=====================

运维思想实现:

1、通过程序双写
 就是同步.


mysql主从复制介绍:

mysql的主从复制方案和scp/rsync等文件级别同步是类似的,都是数据的传输,只不过mysql无需借助第三方工具, 而是其自带的复制功能.有一点不同,mysql主从复制并不是数据库磁盘上的文件直接拷贝复制,而是通过逻辑的binlog日志复制到同步的数据本地然后读取里面sql语句应用到数据库的过程.

mysql 的主从复制是一个异步的复制过程(虽然一般情况下感觉是实时同步的),数据库数据从一个mysql数据库master,复制到一个另一个数据库slave. 在master在slave之间实现整个主从复制的过程是由三个线程参与完成的.其中有两个线程(sql线程和IO线程)在slave端,另一个线程(IO线程)在master端.

要实现mysql的主从复制,首先必须打开master端的binlog功能(mysql-bin.xxxx),整个复制过程实际就是slave从master端获取binlog日志, 然后在slave自身上以相同顺序执行获取的binlog日志中所记录的各种操作.

打开mysql的binlog可以通过在mysql的配置文件my.cnf中的mysqld模块([mysqld]标识后的参数部分)增加log-bin 参数选项.

[mysqld]

log-bin = /data/3306/mysql-bin

mysql主从复制原理重点小结:

(不管是面试还是笔试,必须要画图.)

1.主从复制是异步的,逻辑的SQL语句级的复制.

(拷贝文件复制模式:是mysql高可以用里边的pxc.mysql自带的 就是逻辑的复制)

2.同步时,主库有一个IO线程,从库有两个线程IO和SQL线程.

3.实现主从复制的必要条件,主库开启binlog功能.

4. binlog文件只记录对数据库有更改的SQL语句(来自主数据库内容的变更).


主从AB 具体配置步骤:

修改配置文件中的log-bin和server-id

# egrep "log-bin|server-id"  /data/{3306,3307}/my.cnf

/data/3306/my.cnf:log-bin = /data/3306/mysql-bin

/data/3306/my.cnf:server-id = 1

/data/3307/my.cnf:#log-bin = /data/3307/mysql-bin

/data/3307/my.cnf:server-id = 2

修改完配置文件之后,需要重新启动服务.

[[email protected] scripts]# /data/3306/mysql stop

Stoping MySQL...

[[email protected] scripts]# /data/3306/mysql start

Starting MySQL...

[[email protected] scripts]# /data/3307/mysql stop  

Stoping MySQL...

[[email protected] scripts]# /data/3307/mysql start 

Starting MySQL...

# netstat -lnt|grep 330

mysql> show variables like "log_bin";

mysql> show variables like "server_id";

mysql> show variables;

mysql> grant replication slave on *.* to ‘rep‘@‘10.0.0.%‘ identified by ‘oldboy123‘;

mysql> flush privileges;

检查权限的两种方式:

select user,host from mysql.user;

show grants for ‘rep‘@‘10.0.0.%‘;

主库到从库(内部加锁,外部备份)

锁表(锁表后,不能退出mysql,退出后,锁表失败.):

flush table with read lock;
查看binlog和pos;
show master status;
dump数据库:
mysqldump -uroot -poldboy123 --events -S /data/3306/mysql.sock -A -B|gzip >/opt/bak_$(date +%F).sql.gz
 解锁:
mysql> unlock tables;

(自动化,免交互的锁表dump命令):

mysqldump -uroot -poldboy123 -A -B -F --master-data=2 -x --events
-S /data/3306/mysql.sock >/opt/all.sql

参数说明:

-A   指的是所有的数据库, 用了-A就需要 --events这个参数.

-B 使用这个参数,在从库导入数据的时候,不用创建数据库,可以直接导入.

-x 全局锁表

--master-data=2  记录mysql的binlog位置.作用生成如下命令(=2是
只是注释,不执行; =1的话 前面的注释--就去掉了):

--CHANGE MASTER TO  MASTER_LOG_FILE=‘mysql-bin.000003‘,MASTER_LOG_POS=331;

查看mysql的binlog文件,  需要用mysqlbinlog 命令查看:

# mysqlbinlog mysql-bin.000002

# gzip -d bak_2015-07-23.sql.gz

# mysql -uroot -p /data/3307<bak_2015-07-23.sql

开始同步:

mysql> CHANGE MASTER TO MASTER_HOST=‘192.168.12.128‘, MASTER_PORT=3306, MASTER_USER=‘rep‘, MASTER_PASSWORD=‘oldboy123‘, MASTER_LOG_FILE=‘mysql-bin.000001‘, MASTER_LOG_POS=475; 
mysql -uroot -p‘oldboy456‘ -S /data/3307/mysql.sock<< EOF

stop slave;

CHANGE MASTER TO  

MASTER_HOST=‘192.168.12.128‘, 

MASTER_PORT=3306,

MASTER_USER=‘rep‘, 

MASTER_PASSWORD=‘oldboy123‘, 

MASTER_LOG_FILE=‘mysql-bin.000001‘,

MASTER_LOG_POS=475;

EOF

上一条命令执行之后,在从库3307 会出现master.info和relay.log两个文件:

cat /data/3307/data/master.info

cat /data/3307/relay.log

mysql>start slave;

mysql>show slave status\G;

在主库创建数据库,从库检查是否创建.

主从同步配置步骤 总结:

1.准备两台数据库环境,或者单台多实例环境,能否正常启动和登陆.

2. 配置my.cnf文件,主库配置log-bin和server-id, 从库配置server-id,一般不开启从库log-bin功能.配置参数后需要重启服务.

3.登陆主库增加用于从库连接主库的账户例如:rep,并授权replication slave同步的权限.

4.登陆主库,整库锁表flush table with read lock(窗口关闭后即失效,超时参数到了也失效), 然后show master status 查看binlog的位置状态.

5. 新开窗口, linux命令行备份或导出原有的数据库数据, 并拷贝到从库的所有的服务器目录.

6. 解锁主库,unlock tables;

7. 把 主库导出的原有数据恢复到从库.

8. 根据主库的show master status 查看binlog的位置状态, 在从库执行如下命令:

mysql> CHANGE MASTER TO MASTER_HOST=‘192.168.12.128‘, MASTER_PORT=3306, MASTER_USER=‘rep‘, MASTER_PASSWORD=‘oldboy123‘, MASTER_LOG_FILE=‘mysql-bin.000001‘, MASTER_LOG_POS=475; 

9. 从库开启同步开关,start slave

10.从库show slave status \G;  检查同步状态,并在主库进行更新测试.

补充: flush tables with read lock;

flush table with read lock;

mysqlbinlog mysql-bin.00001        mysqlbinlog是专门查看binlog日志的命令

linux运维必会的知识:

http://bbs.51cto.com/thread-1162430-1.html


mysql主从复制常见问题汇总:

1.主库show master status 没结果, 主库binlog功能未开启,或没有生效.

2.检查CHANGE MASTER ..语句是否有问题.

3.服务无法启动故障

# /data/3306/mysql start

MySQL is running...

# ps -ef|grep mysql

root     1636    1595     pts/0            grep --color=auto mysql

*如果在配置文件正确的前提下, 可以考虑把 pid文件和sock文件删除掉.(有些时候,pkill mysql之后,它的sock文件还存在,所以会导致无法开启服务.后期自己写脚本完善开启服务的判断.)

# rm -f /data/3306/mysql.sock /data/3306/*.pid

# /data/3306/mysql start

Starting MySQL...

4.由于切换binlog 导致 show master status 位置变化无意向.

可能是锁表没锁住,或者是用了-F的参数(当然用了F,不会有影响.)

时间: 2024-11-03 04:26:22

源码安装mysql,及主从同步的相关文章

CentOS 7下源码安装MySQL 5.7

网上说linux安装mysql服务分两种安装方法: ①源码安装,优点是安装包比较小,只有几十M左右,缺点是安装依赖的库多,安装编译时间长,安装步骤复杂容易出错: ②使用官方编译好的二进制文件安装,优点是安装速度快,安装步骤简单,缺点是安装包很大,300M左右(5.7版本的是600M左右), 对于第二种方法,我搞了一天,无果,到某个环节实在是无法走通,老大那边也不让搞了,隔了几天老大又吩咐我在生产服务器上安装mysql,这次我就按照第一种方法源码安装方式 下载源码安装包 http://dev.my

源码安装mysql

创建mysql组:groupadd mysql 创建mysql用户并赋予这个mysq组中,不创建家目录,不允许用户登录.(因为刚刚创建的mysql是虚拟用户,所以不允许登录)useradd mysql -g mysql -M -s /bin/nologin 源码安装mysql 解压后进行编译安装:./configure \--prefix=/application/mysql5.1.72 \--with-unix-socket-path=/application/mysql5.1.72/tmp/

centos6.5下源码安装mysql密码修改

Centos下源码安装mysql密码破解方法: 方法一:首先停止mysql服务,: /etc/init.d/mysqldstop 停止mysql ps -ef |grep mysql 查看mysql是否关闭 然后以跳过权限方式后台启动 /usr/local/mysql/bin/mysqld_safe--skip-grant-tables --user=mysql & /usr/local/mysql/bin/mysql进入mysql 或者执行mysql回车进入mysql,然后修改密码. 修改My

Linux 源码安装mysql

源码安装mysql tar zxf mysql-boost-5.7.11.tar.gz rpm -ivh cmake-2.8.12.2-4.el6.x86_64.rpm yum install cmake-2.8.12.2-4.el6.x86_64.rpm -y cd mysql-5.7.11/ yum install gcc-c++ ncurses-devel bison -y 检测 [[email protected]]# cmake -DCMAKE_INSTALL_PREFIX=/usr/

CentOS 6.4 源码安装MySQL 5.6

1.安装前准备工作 1.1 必备的包 gcc/g++ :MySQL 5.6开始,需要使用g++进行编译.cmake :MySQL 5.5开始,使用cmake进行工程管理,cmake需要2.8以上版本.bison :MySQL语法解析器需要使用bison进行编译.ncurses-devel :用于终端操作的开发包. 1.2 MySQL编译参数 CMAKE_BUILD_TYPE 编译的版本类型:RelWithDebInfo和Debug,不同之处是RelWithDebInfo会进行优化.CMAKE_I

linux上源码安装MySQL详解

最近需要使用MySQL Fabric,这货是MySQL5.6.10之后才出现的utility.手头机器装的是MySQL5.1,所以需要先把旧版MySQL升级成5.6版本.之前没有玩过MySQL,所以这次稍微费了点事.在此,把过程记录下来,希望能给有需求的人提供一点帮助.下面我们就正式开始. 1. 删除老版本MySQL 其实删除老版MySQL是一件很简单的事,但是开始时候由于担心各个包的依赖会导致各种问题,亦步亦趋来得很慢.其实只需要做到这么几步就可以了: 1.1 查看已安装的mysql版本并删除

CentOS7 下源码安装MySQL 8.0.11

CentOS7 下源码安装MySQL 8.0.11 系统环境:CentOS7, 内核:Linux 3.10.0-862.el7.x86_64 如果有旧版本的MySQL,先卸载,用下面命令来查询出系统有哪些相关的MySQL包. rpm -qa | grep mysql 如果上述命令查询出有相关的MySQL包,就卸载 rpm -e 包名 卸载MariaDB包 yum remove mariadb-libs.x86_64 从MySQL官网下载源码包,并将该文件拷贝到系统中. https://dev.m

Linux平台下源码安装mysql多实例数据库

Linux平台下源码安装mysql多实例数据库[[email protected] ~]# netstat -tlunp | grep 330tcp6 0 0 :::3306 :::* LISTEN 6191/mysqld [[email protected] ~]# ss -tlunp | grep 330tcp LISTEN 0 80 :::3306 :::* users:(("mysqld",pid=6191,fd=10)) [[email protected] ~]# syst

CentOS7下源码安装MySQL 8.x

会选择使用源码安装MySQL,想必对MySQL及其他的安装方式已经有了一定的了解,这里就不对周边信息进行过多赘述了,直接开始吧. 编译MySQL比较消耗内存,如果机器内存较小,可能会在编译期间出现内存不足的异常.若没有设置swap分区的可以设置swap分区来解决,否则只能扩容内存了: [[email protected] ~]# dd if=/dev/zero of=/swapfile bs=1k count=2048000 [[email protected] ~]# mkswap /swap