发布时间:2014-09-05 17:01:53作者:知识屋
mysql多实例的安装以及主从复制配置
1.mysql多实例的安装
1)配置文件
# cat /etc/my.cnf.multi
[mysqld_multi]
mysqld=/usr/bin/mysqld_safe //mysqld的路径
mysqladmin=/usr/bin/mysqladmin //mysqladmin的路径
user=root //使用用户
[mysqld1] //1表示标识第一个数据库实例,如下5项为多实例下必须标识的变量
port=3306
socket=/var/lib/mysql/mysql.sock
datadir=/var/lib/mysql
pid-file=/var/lib/mysql/mysql.pid
user=mysql
[mysqld2]
port=3307
socket=/var/lib/mysql3307/mysql3307.sock
datadir=/var/lib/mysql3307
pid-file=/var/lib/mysql3307/mysql3307.pid
user=mysql
2)配置过程
a.建立datadir=/var/lib/mysql3307
mkdir -p /var/lib/mysql3307
chown mysql:mysql /var/lib/mysql3307
b.初始化3307数据库文件
mysql_install_db –datadir=/var/lib/mysql3307 –user=mysql
c.多实例的启动
通过命令mysqld_multi –config-file=/etc/my.cnf.multi report可以查看多实例的运行状态,结果如下:
MySQL server from group: mysqld1 is running
MySQL server from group: mysqld2 not running
说明实例1正在运行中,实例2没有运行,此时可以通过:
mysqld_multi –config-file=/etc/my.cnf.multi start 2的方式启动实例2,并通过report参数进行查询。
关闭实例的命令为:
mysqld_multi –config-file=/etc/my.cnf.multi stop 2
如果在start和stop的后面不添加实例号码的话,将是对所有实例的操作!要小心!
——————————————————————————————————————————
2.mysql主从复制配置
1)主从复制原理
Mysql的 Replication是一个异步的复制过程,从Master复制到Slave。在Master和Slave实现整个复制过程由三个线程来完成,其中两个 线程(Sql线程和IO线程)在Slave端,另外一个线程(IO线程)在 Master端。要实现复制过程,Master必须打开Binary Log功能,复制过程就是Slave从Master端获取mysql-bin.xxxxxx日志然后在自己身上完全顺序的执行日志中所记录的各种操作。
2)主从复制过程
a.Slave上面的IO线程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
b.Master接收到来自Slave的IO线程的请求后,通过负责复制的IO线程根据请求信息读取指定日志指 定位置之后的日志信息,返回给Slave端的IO线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息在Master端的Binary Log文件的名称以及在BinaryLog中的位置;
c.Slave的IO线程接受到信息后,将接收到的日志内容依次写入到Slave端的Relay Log文件的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master-info文件中(下一次Slave请求时用)。
d.Slave的SQL线程检测到Relay Log中新增加了内容后,会马上解析该Log文件中的内容成为在 Master端真实执行时候的那些可执行的 Query 语句,并在自身执行这些 Query。
-
3)主从复制配置实例
a.master机器:192.168.100.19 3306,slave机器:192.168.100.22 3306
b.分别在master上和slave上创建一个用于复制的数据库repl: create database repl;
c.在master的配置文件/etc/my.cnf.multi中的[mysqld1]增加如下配置:
server-id=1 //master的id,通常为1
log-bin=mysql-bin //打开Binary Log功能
binlog-do-db=repl //需要同步的数据库,如果没有这个参数,表示通报所有数据库
d.在master机上为slave机添加一同步帐号
mysql> grant replication slave on *.* to ‘repl’@’192.168.100.22′ identified by ‘repl’;
-
e.在slave的配置文件/etc/my.cnf.multi中的[mysqld1]增加如下配置:
server-id=2 //slave id
master-host=192.168.100.19 //master ip
master-user=repl //连接master的账号
master-password=repl //连接master的密码
master-port=3306 //master port
master-connect-retry=60
replicate-do-db=repl //需要同步的数据库
-
f.重启master
mysqld_multi –config-file=/etc/my.cnf.multi stop 1
mysqld_multi –config-file=/etc/my.cnf.multi start 1
用show master status 命令查看如下:
mysql> show master status;
+————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+————+———-+————–+——————+
| log.000002 | 626 | repl | |
+————+———-+————–+——————+
g.重启slave
mysqld_multi –config-file=/etc/my.cnf.multi stop 1
mysqld_multi –config-file=/etc/my.cnf.multi start 1
用show slave status查看如下:(如果Slave_IO_Running、Slave_SQL_Running状态为Yes则表明设置成功)
mysql> show slave status/G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.100.19
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: log.000002
Read_Master_Log_Pos: 626
Relay_Log_File: mysql-relay-bin.000004
Relay_Log_Pos: 229
Relay_Master_Log_File: log.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: repl
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 626
Relay_Log_Space: 229
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
1 row in set (0.00 sec)
-
h.测试
在master建一个表并插入数据:
mysql> CREATE TABLE `vendors` (
-> `vend_id` int(11) NOT NULL auto_increment,
-> `vend_name` char(50) NOT NULL,
-> `vend_address` char(50) default NULL,
-> `vend_city` char(50) default NULL,
-> `vend_state` char(5) default NULL,
-> `vend_zip` char(10) default NULL,
-> `vend_country` char(50) default NULL,
-> PRIMARY KEY (`vend_id`)
-> );
mysql> insert into vendors values(’1′,’zou’,'tianhe’,'guangzhou’,'cn’,’5100′,’zhongguo’);
在slave查看是否有数据:
mysql> select * from vendors;
+———+———–+————–+———–+————+———-+————–+
| vend_id | vend_name | vend_address | vend_city | vend_state | vend_zip | vend_country |
+———+———–+————–+———–+————+———-+————–+
| 1 | zou | tianhe | guangzhou | cn | 5100 | zhongguo |
+———+———–+————–+———–+————+———-+————–+
——————————————————————————————————————————
3.mysql配置其他常见的参数说明
skip-locking //避免mysql外部锁定,减少出错几率,增强稳定性
skip-name-resolve //取消DNS的反向解析
back_log = 64 //指定MySQL可能的连接数量,该参数指出参数的值指出在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中。
key_buffer_size = 256M //用于索引块的缓冲区大小,增加它可得到更好处理的索引
max_allowed_packet = 8M //一个查询语句包的最大尺寸。
table_cache = 256K //所有线程打开表的数量
sort_buffer_size = 6M
net_buffer_length = 256K 通信缓冲区在查询期间被重置到该大小
read_buffer_size = 4M //读查询操作所能使用的缓冲区大小,如果有100个链接,则实际分配缓冲区为100*4=400M
read_rnd_buffer_size = 2M
join_buffer_size = 8M //用于全部联合(join)的缓冲区大小(不是用索引的联结)。缓冲区对2个表间的每个全部联结分配一次缓冲区,当增加索引不可能时,增加该值可得到一个更快的全部联结。(通常得到快速联结的最佳方法是增加索引。)
myisam_sort_buffer_size = 64M
query_cache_size = 8M
max_connections=2000 //允许同时连接MySQL服务器的客户数量。如果超出该值,MySQL会返回Too many connections错误
max_connect_errors=99999 //如果有多于该数量的中断连接,将阻止进一步的连接;如需对该主机进行解禁,执行:FLUSH HOST;
thread_cache_size=128
thread_concurrency = 8
log_slow_queries = slow_queries.log //开启慢查询日志
long_query_time = 1 //如果一个查询所用时间大于此时间,slow_queried计数将增加
default-character-set=utf8
lower_case_table_names=1 //MySQL总使用小写字母进行SQL操作
innodb_buffer_pool_size = 3000M //InnoDB 存储引擎的表数据和索引数据的最大内存缓冲区大小,适当的增加这个参数的大小,可以有效的减少InnoDB类型的表的磁盘I/O 。在一个以 InnoDB 为主的专用数据库服务器上,可以考虑把该参数设置为物理内存大小的 60%-80% 。
innodb_additional_mem_pool_size = 50M //这个参数用来设置InnoDB存储的数据目录信息和其它内部数据结构的内存池大小。如果 InnoDB 用光了这个池内的内存,InnoDB开始从操作系统分配内存,并且往MySQL错误日志写警告信息。
expire_logs_days = 30 //Binary Log自动删除的天数
本文出自“键盘出江湖”
linux一键安装web环境全攻略 在linux系统中怎么一键安装web环境方法
Linux网络基本网络配置方法介绍 如何配置Linux系统的网络方法
Linux下DNS服务器搭建详解 Linux下搭建DNS服务器和配置文件
对Linux进行详细的性能监控的方法 Linux 系统性能监控命令详解
linux系统root密码忘了怎么办 linux忘记root密码后找回密码的方法
Linux基本命令有哪些 Linux系统常用操作命令有哪些
Linux必学的网络操作命令 linux网络操作相关命令汇总
linux系统从入侵到提权的详细过程 linux入侵提权服务器方法技巧
linux系统怎么用命令切换用户登录 Linux切换用户的命令是什么
在linux中添加普通新用户登录 如何在Linux中添加一个新的用户
2012-07-10
CentOS 6.3安装(详细图解教程)
Linux怎么查看网卡驱动?Linux下查看网卡的驱动程序
centos修改主机名命令
Ubuntu或UbuntuKyKin14.04Unity桌面风格与Gnome桌面风格的切换
FEDORA 17中设置TIGERVNC远程访问
StartOS 5.0相关介绍,新型的Linux系统!
解决vSphere Client登录linux版vCenter失败
LINUX最新提权 Exploits Linux Kernel <= 2.6.37
nginx在网站中的7层转发功能