您的位置:首页 > 数据库 > MySQL

mysql多实例的安装以及主从复制配置

2012-05-04 16:50 1071 查看
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自动删除的天数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: