源码安装mysql,及主从同步
源码安装mysql
[可选] 如果用源码安装cmake软件:
cd /home/oldboy/tools/ tar xf cmake-2.8..tar.gz cd cmake-2.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..tar.gz cd mysql-5.5. cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5. \ -DMYSQL_DATADIR=/application/mysql-5.5./data \ -DMYSQL_UNIX_ADDR=/application/mysql-5.5./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= \ -DWITH_FEDERATED_STORAGE_ENGINE= \ -DWITH_BLACKHOLE_STORAGE_ENGINE= \ -DWITHOUT_EXAMPLE_STORAGE_ENGINE= \ -DWITHOUT_PARTITION_STORAGE_ENGINE= \ -DWITH_FAST_MUTEXES= \ -DWITH_ZLIB=bundled \ -DENABLED_LOCAL_INFILE= \ -DWITH_READLINE= \ -DWITH_EMBEDDED_SERVER= \ -DWITH_DEBUG=
没有提示,是最好的结果.
# echo $? 查看是否预编译成功 # make&&make install # ln -s /application/mysql-5.5./ /application/mysql # mkdir -p /data/{,}/data * {} 输出字母字符序列(可以用作批量创建) # tree /data
----------------------------------------
(rz data.zip--->/; 解压后再次tree /data)
查看my.cnf, 其中的socket那一块 是 多实例登陆需要指定socket.
启动脚本中启动和关闭服务的原理:
mysqld_safe --defaults-file=/data//my.cnf >& >/dev/null & mysqldadmin -u root -poldboy -S /data//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 find /data -type f -name "my.cnf"|xargs ls -l echo 'export PATH=/application/mysql/bin:$PATH'>>/etc/profile tail - /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//data/ --user=mysql
* vi /etc/hosts 如果有警告的话在hosts文件中做一下修改就好了.
# ./mysql_install_db --basedir=/application/mysql/ --datadir=/data//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//my.cnf #log-error = /data//error.log log-error=/data//mysql_oldboy3306.err
查看错误日志最小化 查看:
# grep -i error /data//mysql_oldboy3306.err
高手都有查看日志的习惯!!!
-------------------------
登陆:
mysql -S /data/3306/mysql.sock
-S 是指定sock文件(这里演示的是一个没有密码的登陆过程.)
设置密码
mysqladmin -uroot password oldboy123 -S /data//mysql.sock mysql -uroot -poldboy123 -S /data//mysql.sock mysqladmin -uroot password oldboy456 -S /data//mysql.sock mysql -uroot -poldboy456 -S /data//mysql.sock
修改完密码之后,在启动脚本中:
# sed -n '13p' /data//mysql # sed -i '13 s#oldboy#oldboy123#g' /data//mysql # sed -n '13p' /data//mysql # sed -n '13p' /data//mysql # sed -i '13 s#oldboy#oldboy456#g' /data//mysql
关闭服务器,然后重启.
# /data//mysql stop # /data//mysql stop # /data//mysql start # /data//mysql start netstat -lntup|grep
快速创建mysql实例:
mkdir -p /data//data \cp /data//my.cnf /data// \cp /data//mysql /data// sed -i 's/3306/3308/g' /data//my.cnf sed -i 's/server-id=1/server-id=8/g' /data//my.cnf sed -i 's/3306/3308/g' /data//mysql chown -R mysql:mysql /data/ chmod /data//mysql cd /application/mysql/scripts ./mysql_install_db --datadir=/data//data --basedir=/application/mysql --user=mysql chown -R mysql:mysql /data/ /data//mysql start sleep netstat -lnt|grep 启动 和 修改密码: mysqladmin -uroot password oldboy123 -S /data//mysql.sock mysql -uroot -poldboy123 -S /data//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/{,}/my.cnf /data//my.cnf:log-bin = /data//mysql-bin /data//my.cnf:server-id = /data//my.cnf:#log-bin = /data//mysql-bin /data//my.cnf:server-id =
修改完配置文件之后,需要重新启动服务.
[root@MySQL scripts]# /data//mysql stop Stoping MySQL... [root@MySQL scripts]# /data//mysql start Starting MySQL... [root@MySQL scripts]# /data//mysql stop Stoping MySQL... [root@MySQL scripts]# /data//mysql start Starting MySQL... # netstat -lnt|grep 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//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 参数说明: -A 指的是所有的数据库, 用了-A就需要 --events这个参数. -B 使用这个参数,在从库导入数据的时候,不用创建数据库,可以直接导入. -x 全局锁表 --master-data=2 记录mysql的binlog位置.作用生成如下命令(=2是 --CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=331; |
查看mysql的binlog文件, 需要用mysqlbinlog 命令查看:
# mysqlbinlog mysql-bin. # gzip -d bak_2015--.sql.gz # mysql -uroot -p /data/<bak_2015--.sql
开始同步:
mysql> CHANGE MASTER TO MASTER_HOST='192.168.12.128', MASTER_PORT=, MASTER_USER='rep', MASTER_PASSWORD='oldboy123', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=;
mysql -uroot -p'oldboy456' -S /data//mysql.sock<< EOF stop slave; CHANGE MASTER TO MASTER_HOST='192.168.12.128', MASTER_PORT=, MASTER_USER='rep', MASTER_PASSWORD='oldboy123', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=; EOF
上一条命令执行之后,在从库3307 会出现master.info和relay.log两个文件:
cat /data//data/master.info cat /data//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=, MASTER_USER='rep', MASTER_PASSWORD='oldboy123', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=;
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//mysql start MySQL is running... # ps -ef|grep mysql root pts/ grep --color=auto mysql
*如果在配置文件正确的前提下, 可以考虑把 pid文件和sock文件删除掉.(有些时候,pkill mysql之后,它的sock文件还存在,所以会导致无法开启服务.后期自己写脚本完善开启服务的判断.)
# rm -f /data//mysql.sock /data//*.pid # /data/3306/mysql start Starting MySQL...
4.由于切换binlog 导致 show master status 位置变化无意向.
可能是锁表没锁住,或者是用了-F的参数(当然用了F,不会有影响.)
源码安装mysql,及主从同步的更多相关文章
- Centos7源码安装mysql及读写分离,互为主从
Linux服务器 -源码安装mysql 及读写分离,互为主从 一.环境介绍: Linux版本: CentOS 7 64位 mysq版本: mysql-5.6.26 这是我安装时所使用的版本, ...
- CentOS 7下源码安装MySQL 5.7
网上说linux安装mysql服务分两种安装方法: ①源码安装,优点是安装包比较小,只有几十M左右,缺点是安装依赖的库多,安装编译时间长,安装步骤复杂容易出错: ②使用官方编译好的二进制文件安装,优点 ...
- centos 6x系统下源码安装mysql操作记录
在运维工作中经常部署各种运维环境,涉及mysql数据库的安装也是时常需要的.mysql数据库安装可以选择yum在线安装,但是这种安装的mysql一般是系统自带的,版本方面可能跟需求不太匹配.可以通过源 ...
- lnux下源码安装MySQL 5.6
nux下源码安装MySQL 5.6 说明:本文是我自己测试的MySQL5.6源码安装,经本人亲自实践,完全可用,另在5.6之前的版本也是可以按照本文源码安装的.我是在两台linux下一台安装5.5,另 ...
- CentOS 6.4 源码安装MySQL 5.6
1.安装前准备工作 1.1 必备的包 gcc/g++ :MySQL 5.6开始,需要使用g++进行编译.cmake :MySQL 5.5开始,使用cmake进行工程管理,cmake需要2.8以上版本. ...
- Linux平台下源码安装mysql多实例数据库
Linux平台下源码安装mysql多实例数据库[root@linux-node1 ~]# netstat -tlunp | grep 330tcp6 0 0 :::3306 :::* LISTEN 6 ...
- CentOS 7下源码安装MySQL 5.6
本文转载,并非原创. 目录 准备工作 运行环境 确认你的安装版本 下载MySQL 安装MySQL 准备安装环境 编译和安装 配置MySQL 单实例配置 单实例配置方法 添加防火墙 启动MySQL 重启 ...
- CentOS 6.5下源码安装MySQL 5.6
变量lower_case_file_system说明是否数据目录所在的文件系统对文件名的大小写敏感.ON说明对文件名的大小写不敏感,OFF表示敏感. 在my.cnf中[mysqld]更改lower_c ...
- Linux源码安装mysql步骤
创建文件夹: mkdir /usr/local/webserver 安装必要依赖包 yum -y install gcc gcc-c++ make ncurses-devel安装cmake ...
随机推荐
- Wscript.Shell 对象详细介绍
详细 WshShell 对象ProgID Wscript.Shell 文件名 WSHom.Ocx CLSID F935DC22-1CF0-11d0-ADB9-00C04FD58A0B IID F935 ...
- 微信小程序图片上传放大预览删除代码
效果: 一,下面是上传图片的效果 image.js代码: Page({ //选择相册或拍照 data: { imgs: [] }, //上传图片 chooseImg: function (e) { v ...
- PIE SDK算法的异步调用
1.算法功能简介 异步方法一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作.异步方法通常会在另外一个线程中,“真实”地执行着.整个过程,不会阻碍调用者的工作. PIE SDK支持算法功能的执 ...
- java.lang.IllegalArgumentException: Result Maps collection already contains value for xxx
本人项目产生此问题的原因是: 本地备份了一份xxxmapper.xml的副本“xxxmapper - 副本.xml”,应该是系统会自动加载“mappe”目录下的所有xml文件. 参考:https:// ...
- 《The Python Standard Library》——http模块阅读笔记2
http.server是用来构建HTTP服务器(web服务器)的模块,定义了许多相关的类. 创建及运行服务器的代码一般为: def run(server_class=HTTPServer, handl ...
- Ubuntu Server 14 配置
语言 在虚拟机中安装了Ubuntu Server. Ubuntu Server只有控制台,没有图形界面.要在控制台下安装中文支持很麻烦.所以直接设置为英文,反正我看得懂. 在安装的时候必须将" ...
- Docker原理(开发技术分享转发)
Docker原理Docker是啥Docker是一个程序运行.测试.交付的开放平台,Docker被设计为能够使你快速地交付应用.在Docker中,你可以将你的程序分为不同的 基础部分,对于每一个基础部分 ...
- apache CXF quickstart
1下载 官网: cxf.apache.org 下载 CXF 的开发包: 解压上面的 zip 文件 : 2介绍 1什么是cxf Apache CXF™ is an open source service ...
- lua实现List及Dictionary
转载:http://www.maosongliang.com/archives/122 参考 http://blog.csdn.net/jason_520/article/details/541736 ...
- NETCDF入门
转载自:http://www.cnblogs.com/davidgu/p/3572317.html 一.概述 NetCDF全称为network Common Data Format,中文译法为“网络 ...