Mysql主从配置+读写分离

    MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具。因此,我们首先要在系统中源码编译安装cmake工具。

注:安装前须查看是否已经安装了如下依赖包,如果没有请安装。

apt-get -y install gcc g++ libncurses5-dev ncurses-devel openssl

 

一.主库安装及配置

1.源码安装cmake

# tar xf cmake-3.0.0.tar.gz

# cd cmake-3.0.0

# ./configure --prefix=/usr/local/cmake

# make && make install或gmake && gmake install

注:这里定要用源码安装,不能用apt-get安装,不然会在编译时报错。

 

2.编译安装mysql

#mkdir -p /mysql/data  /usr/local/mysql

#useradd -r -s /usr/sbin/nologin mysql

#chown mysql.mysql -R /mysql/data

# tar xf mysql-5.5.21.tar.gz

# cd mysql-5.5.21

# /usr/local/cmake/bin/cmake  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql

-DMYSQL_DATADIR=/mysql/data/ \

-DMYSQL_UNIX_ADDR=/mysql/data/mysqld.sock \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DSYSCONFDIR=/etc \

-DEXTRA_CHARSETS=all \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_unicode_ci \

-DWITH_DEBUG=0# make && make install

注:如果在中途有提示报错不能继续,请将如上的一些依赖包,并删除CMakeCache文件再重新编译;

 

编译各参数说明:

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql

; mysql安装的主目录,5.5.17版本默认为/usr/local/mysql,(可省略)

-DMYSQL_DATADIR=/home/system_username/mysql/mysqldata

; mysql数据保存的路径,自定义

-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock

; 系统Socket文件(.sock)设置,基于该文件路径进行Socket连接,必要为绝对路径

-DSYSCONFDIR=/etc mysql       ; 配置文件my.cnf地址,默认/etc下(可省略)

-DMYSQL_TCP_PORT=3306

; 数据库服务器TCP/IP连接的监听端口,默认为3306(可省略)

-DENABLED_LOCAL_INFILE=1      ; 默认为关闭,这里开启

-DEXTRA_CHARSETS=all

-DDEFAULT_CHARSET=utf8

-DDEFAULT_COLLATION=utf8-general_ci         ; 数据库编码设置

-DWITH_INNOBASE_STORAGE_ENGINE=1

-DWITH_ARCHIVE_STORAGE_ENGINE=1

-DWITH_BLACKHOLE_STORAGE_ENGINE=1

-DWITH_FEDERATED_STORAGE_ENGINE=1

-DWITH_PARTITION_STORAGE_ENGINE=1       ; 存储引擎设置

# cp support-files/my-medium.cnf  /etc/my.cnf

# cp support-files/mysql.server  /etc/init.d/mysqld

# chmod +x /etc/init.d/mysqld

# cd scripts/

# sh mysql_install_db  --user=mysql  --basedir=/usr/local/mysql/  --datadir=/mysql/data/

# ln /usr/local/mysql/bin/*  /usr/local/sbin/

# service mysqld start

给root加个密码123456

# /usr/local/mysql/bin/mysqladmin -u root password  123456

使用mysql数据库/更改root用户的登录密码

# mysql -uroot -p 123456

>  use mysql ;

>  update user set password=PASSWORD("654321") where user='root ';

>  mysql>FLUSH PRIVILEGES ;

3. 主库配置文件my.cnf修改

# vim /etc/my.cnf

log-bin=master-bin

log-bin-index=master-bin.index

binlog_format=mixed

server-id = 1

datadir=/mysql/data

innodb_file_per_table = 1     ; 重要有用

sync_binlog = 1             ;此参数设置,用于事务安全

SHOW GLOBAL VARIABLES LIKE '%log'   ; 查看全局设置

4. 添加从库授权用户

# mysql  -uroot -p

> GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'192...' IDENTIFIED BY 'REPLPASS' ;

> FLUSH PRIVILEGES ;

> SHOW MASTER status ;

注:如果主服务器已经存在应用数据,则在进行主从复制时,需要做以下处理: (主数据库进行锁表操作,不让数据再进行写入动作。

mysql> FLUSH TABLES WITH READ LOCK;

二.从库安装及配置

 

1. 源码安装cmake和mysql见主库安装步骤

。 。 。 。 。 。

2. 从库配置文件夹my.cnf修改

# vim  /etc/my.cnf

relay-log = relay-log

relay-log-index = relay-log.index

service-id = 2

binlog_format=mixed

datadir=/mydata/data

innodb_file_per_table = 1

read-only=YES/ON/1/TURE     ; 从数据库只有读权限

注:read-only对PERSU权限的用户不生效

3. 连接到主库

# mysql -uroot

> CHANGE MASTER TO MASTER_HOST=’192.168.X.X’, MASTER_USER=’repluser’,

MASTER_LOG_FILE=’master-bin.00000X’,MASTER_LOG_POS=XXX ;

> START SLAVE

> SHOW SLAVE STATUS\G ;

STOP SLAVE IO_THREAD;       单独开启关闭线程

STOP SLAVE SQL_THERAD;

/mydata/data/目录下存放两个重要的文件,master.info/relay-log.info

这两个文件记录着复制的过程

# file master.info         是一个ASCII码文件

开启关闭线程,都会记录在mysql错误日志当中

tail /mydata/data/node2.magedu.com.err

 

三.Mysql-proxy

1.解压mysql-proxy二进制包,可直接使用

# tar xf mysql-proxy-0.8.3-linux-rhel5-x86-32bit.tar.gz

# mv mysql-proxy-0.8.3 mysql-proxy

# cd mysql-proxy

# vim share/doc/mysql-proxy/rw-splitting.lua

if not proxy.global.config.rwsplit then

proxy.global.config.rwsplit = {

min_idle_connections = 1,         ; 将参数改为1

max_idle_connections = 1,

is_debug = false

}

End

2.创建启动脚本

# vim  mysql-proxy.sh

#!/bin/bash

/home/wang/mysql-proxy/bin/mysql-proxy --proxy-backend-addresses=192.168.10.48:3306 --proxy-read-only-backend-addresses=192.168.10.45:3306 --proxy-lua-script=/home/wang/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua  &

# sh mysql-proxy.sh

# netstat -anpt |grep 4040 / 4041               ;查看进程是否启动

3. 在另外一台主机上通过mysql命令连入mysql-proxy的4040端口,默认情况下不能连接,因为数据库默认拒绝从远程登录,所以要在主从数据库都进行权限设置,允许远程登录,这里要注意的是,在主从做权限,非mysql-proxy这台主机,本人就是因为这个失误,倒致半到没找到原因!!

1)主从都做如下配置

# mysql -uroot

> grant all privileges on *.* to ‘wang’@’%’ identified by ‘wang’;

> flush privileges

>exit

2) 现可在另一台主机上通过mysql命令成功登录主从服务,如果是写操作将会在主服务器上操作,读操作会在从服务器上操作,至此就实现了mysql主从和读写分离的作用。

四.在windows平台下连接linux中mysql服务器

使用Navicat for MySQL连接远程的MySQL服务器,却提示:Can't get hostname for your address
明明已经使用grant命令授权过了的呀,原来还需要再执行一步:

也有可能是防火墙的原因,关闭iptables防火墙,或查看selinux里是否开启等;

1)编辑/etc/my.cnf,在:
[mysqld]
内添加一行:skip-name-resolve


2
)MySQL忽略数据库表名大小写
修改/etc/my.cnf,在
[mysqld]
内添加一行:lower_case_table_names=1

附:MySQL常见错误代码说明
1005:创建表失败 
1006
:创建数据库失败 
1007
:数据库已存在,创建数据库失败 
1008
:数据库不存在,删除数据库失败 
1009
:不能删除数据库文件导致删除数据库失败 
1010
:不能删除数据目录导致删除数据库失败 
1011
:删除数据库文件失败 
1012
:不能读取系统表中的记录 
1020
:记录已被其他用户修改 
1021
:硬盘剩余空间不足,请加大硬盘可用空间 
1022
:关键字重复,更改记录失败 
1023
:关闭时发生错误 
1024
:读文件错误 
1025
:更改名字时发生错误 
1026
:写文件错误 
1032
:记录不存在 
1036
:数据表是只读的,不能对它进行修改 
1037
:系统内存不足,请重启数据库或重启服务器 
1038
:用于排序的内存不足,请增大排序缓冲区 
1040
:已到达数据库的最大连接数,请加大数据库可用连接数 
1041
:系统内存不足 
1042
:无效的主机名 
1043
:无效连接 
1044
:当前用户没有访问数据库的权限 
1045
:不能连接数据库,用户名或密码错误 
1048
:字段不能为空 
1049
:数据库不存在 
1050
:数据表已存在 
1051
:数据表不存在 
1054
:字段不存在 
1065
:无效的SQL语句,SQL语句为空 
1081
:不能建立Socket连接 
1114
:数据表已满,不能容纳任何记录 
1116
:打开的数据表太多 
1129
:数据库出现异常,请重启数据库 
1130
:连接数据库失败,没有连接数据库的权限 
1133
:数据库用户不存在 
1141
:当前用户无权访问数据库 
1142
:当前用户无权访问数据表 
1143
:当前用户无权访问数据表中的字段 
1146
:数据表不存在 
1147
:未定义用户对数据表的访问权限 
1149
:SQL语句语法错误 
1158
:网络错误,出现读错误,请检查网络连接状况 
1159
:网络错误,读超时,请检查网络连接状况 
1160
:网络错误,出现写错误,请检查网络连接状况 
1161
:网络错误,写超时,请检查网络连接状况 
1062
:字段值重复,入库失败 
1169
:字段值重复,更新记录失败 
1177
:打开数据表失败 
1180
:提交事务失败 
1181
:回滚事务失败 
1203
:当前用户和数据库建立的连接已到达数据库的最大连接数,请增大可用的数据库连接数或重启数据库 
1205
:加锁超时 
1211
:当前用户没有创建用户的权限 
1216
:外键约束检查失败,更新子表记录失败 
1217
:外键约束检查失败,删除或修改主表记录失败 
1226
:当前用户使用的资源已超过所允许的资源,请重启数据库或重启服务器 
1227
:权限不足,您无权进行此操作 
1235
:MySQL版本过低,不具有本功能

Mysql主从配置+读写分离的更多相关文章

  1. Mysql主从配置+读写分离(转)

       MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. 注:安装前须查看是否已经安装了 ...

  2. MySQL 主从配置 读写分离

    Master配置 1.创建用户: 在Master MySQL上创建一个用户‘repl’,并允许其他Slave服务器可以通过远程访问Master,通过该用户读取二进制日志,实现数据同步. create ...

  3. 聊聊Mysql主从同步读写分离配置实现

    Hi,各位热爱技术的小伙伴您们好,好久没有写点东西了,今天写点关于mysql主从同步配置的操作日志同大家一起分享.最近自己在全新搭建一个mysql主从同步读写分离数据库简单集群,我讲实际操作步骤整理分 ...

  4. 使用docker 实现MySQL主从同步/读写分离

    1. 利用 docker 实现 mysql 主从同步 / 读写分离 为了保证数据的完整和安全,mysql 设计了主从同步,一个挂掉还可以用另个.最近重构论坛,想来改成主从吧.担心失误,就先拿 dock ...

  5. Docker容器启动Mysql,Docker实现Mysql主从,读写分离

    Docker容器启动Mysql,Docker实现Mysql主从,读写分离 一.Docker文件编排 二.配置主从复制 2.1 配置master 2.2 配置slave 三.验证主从复制 3.1 mas ...

  6. mysql 主从同步-读写分离

    主从同步与读写分离测试 一.  实验环境(主从同步) Master                   centos 7.3              192.168.138.13 Slave     ...

  7. mysql主从同步--读写分离。

    1.mysql 安装参考 https://www.cnblogs.com/ttzzyy/p/9063737.html 2. 主mysql,从mysql 指定配置文件启动 mysqld --defaul ...

  8. docker-compose.yml样例(mysql主从+mycat读写分离)

    Docker-compose.yml文件示例 1.mysql主从复制的docker-compose.yml文件 # cat docker-compose.yml version: '2' # 这个ve ...

  9. MySQL主从及读写分离配置

    <<MySQL主从又叫做Replication.AB复制.简单讲就是A和B两台机器做主从后,在A上写数据,B也会跟着写数据,两者数据实时同步>> MySQL主从是基于binlo ...

随机推荐

  1. windows主机mysql忘记密码如何重置

    本文主要是针对mysql重置密码过程中出现“mysqld不是内部命令或外部命令”的问题而写的.网上有很多关于mysql忘记密码了如何找回的文章,但是很多说的都不够详细,特别是还要用到DOS命令,可能这 ...

  2. [css]display: table-cell,用div做分列布局

    table-cell我们却能用得到,而且是用它来干一件很重要的事情——多列布局. 多列布局在css中有多重要就不用我说了吧,传统模式下大家都使用float来解决这一问题,但是float写出来的东西代码 ...

  3. Finite Difference Method with Mathematica

    Euler's method

  4. The Sorrows of Young Werther

    The Sorrows of Young Werther J.W. von Goethe Thomas Carlyle and R.D. Boylan Edited by Nathen Haskell ...

  5. 《JavaScript高级程序设计》 读书笔记(一)

    标签的位置 按照传统的做法,所有<script>元素都应该放在页面的<head>元素中,例如: <!DOCTYPE html> <html> <h ...

  6. ThinkPHP3.1快速入门(13)自动完成

    自动完成是ThinkPHP提供用来完成数据自动处理和过滤的方法,使用create方法创建数据对象的时候会自动完成数据处理.因此,在ThinkPHP使用create方法来创建数据对象是更加安全的方式,而 ...

  7. C++ Primer 学习笔记_95_用于大型程序的工具 --多重继承与虚继承

    用于大型程序的工具 --多重继承与虚继承 引言: 大多数应用程序使用单个基类的公用继承,可是,在某些情况下,单继承是不够用的,由于可能无法为问题域建模,或者会对模型带来不必要的复杂性. 在这些情况下, ...

  8. 360开源的类Redis存储系统:Pika

    Pika 是 360 DBA 和基础架构组联合开发的类 Redis 存储系统,完全支持 Redis 协议,用户不需要修改任何代码,就可以将服务迁移至 Pika.有维护 Redis 经验的 DBA 维护 ...

  9. [Effective C++ --012]复制对象时勿忘其每一个成分

    引言: 在深拷贝和浅拷贝的理解中,我们知道了“拷贝构造函数”一词,并且也了解了它的构成. A(const A& r); // 形式有多种,在这里只列出一个 因此,在值传递的应用场景里,我们可以 ...

  10. Objective-C中系统宏的用法总结

    先说一下本文中会提到的内容:##,__VA_ARGS__, __FILE__, __LINE__ , __FUNCTION__等 宏变量: 先举一个例子,会用到上面这些宏: #define mypri ...