Mysql安装&同步

mysql压缩文件格式的MySQL二进制分发版

一.   安装的软件

1.  Red Hat Enterprise Linux 4.0 update5

2.  mysql-5.0.45-linux-i686-icc-glibc23.tar.gz

二、装步骤如下:

首先检查是否安装了Red Hat Enterprise Linux 4.0中自带的mysql服务,检查系统是否安装了mysql软件包,在终端执行如下命令:

Shell> rpm –aq | grep mysql –ri

显示如下:

mysql-4.1.12-3.RHEL4.1

Mod_auth_mysql-2.6.1-2.2   等软件包

在安装mysql二进制分发版之前请先卸载mysql  rpm软件包

 

Shell> rpm e mysql-4.1.12-3.RHEL4.1 将相关的rpm包逐一掉。

 

shell> groupadd mysql

shell> useradd -g mysql mysql    mysql增加一个登录用户和组

shell> cd /usr/local

shell> tar –zxvf mysql-5.0.45-linux-i686-icc-glibc23.tar.gz

shell> ln -s mysql-5.0.45-linux-i686-icc-glibc23  mysql

shell> cd mysql

shell> scripts/mysql_install_db –user=mysql

 /*如果你用root运行命令,应当使用–user选项。选项的值应与你在第一步为运行服务器所创建的登录账户相同。如果你用该用户登录来运行命令,可以省略–user选项。*/

shell> chown -R root  .

shell> chown -R mysql data

shell> chgrp -R mysql .

 /* 第一个命令将文件的所有属性改为root用户。第二个命令将数据目录的所有属性改为mysql用户。第三个命令将组属性改为mysql  */

shell> cp support-files/my-medium.cnf  /etc/my.cnf

shell> cp support-files/mysql.server    /etc/init.d/mysql

shell> chmod +x    /etc/init.d/mysql

shell> chkconfig –add mysql

shell> chkconfig  – -level 345 mysql on  /* mysql添加为服务*/

shell> chkconfig  – -list mysql          /* mysql level服务状态*/

shell> bin/mysqld_safe –user=mysql &   /* 命令启动MySQL服务器  */

 或者shell> service mysql start  /* 启动mysql */

shell> service mysql stop /* 停止mysql*/

至此,mysql的安装基本完成!

 

三、优化:对以下参数进行调整

show variables like ‘key_buffer_size’;

show variables like ‘max_allowed_packet’;

show variables like ‘table_cache’;

show variables like ‘sort_buffer_size’;

show variables like ‘read_buffer_size’;

show variables like ‘read_rnd_buffer_size’;

show variables like ‘myisam_sort_buffer_size’;

show variables like ‘thread_cache_size’;

show variables like ‘query_cache_size’;

 

set global key_buffer_size=384000000;

set global max_allowed_packet = 1000000;

set global table_cache = 512;

set global sort_buffer_size = 2000000;

set global read_buffer_size = 2000000;

set global read_rnd_buffer_size = 8000000;

set global myisam_sort_buffer_size = 64000000;

set global thread_cache_size = 8;

set global query_cache_size = 32000000;

 

low_priority_updates

show variables like ‘%low_priority_u%’;

SET LOW_PRIORITY_UPDATES=1

Start mysqld with –low-priority-updates

 

添加:/etc/my.cnf/ 

long_query_time = 1

log_slow_queries=mydatabase-slwqry

 

修改:max_connection=1500  默认:max_connection=100

三、Mysql数据库数据同步实现

    两台安装一样的系统,都是linux as4Mysql的版本是5.0.45,都是目前最新的版本。

A服务器: 192.168.1.13主服务器master
B
服务器: 192.168.1.14 副服务器slave
Master
服务器设置:
shell>to_path/ bin/mysql  –uroot  –p
mysql>grant replication slave on *.* to ‘slaver’@‘192.168.1.14’ identified by ‘password’;

/* 在主服务器上为服务器设置一个连接账slaver,连接密码是password该账户必须授予REPLICATION SLAVE权限。如果账户仅用于复制(推荐这样做),则不需要再授予任何其它权限。*/

mysql>flush tables with read lock;    //停止数据库的写状态


导出Master的数据库到slave的机器,可以选择导出需要同步的数据库或者打包需要同步的数据库

Shell>tar zcvf  mydatabase.slave.tar.gz  /usr/local/mysql/data/mydatabase

movivi1.slave.tar.gz传输到slave /usr/local/mysql/data/并且释放
Master机器上修改/etc/my.cnf
[mysqld]区段内加入参数
log-bin=mysql-bin
server-id=1
binlog_do_db = mydatabase   //
要同步的数据库
binlog_ignore_db = mysql,test,information_schema
recommendation                           // 不需要同步的库,5.0 information_schema这个库
sql-bin-update-same  //同步形式 该参数在很多方案中都有用到, 我在测试过程中使用该参数,发现数据库启动时会报错,故没有使用该参数,具体不会影响数据库主从同步。
重启Master服务器的mysql服务或者

Shell> unlock tables   //解除数据库表的写状态

Shell>show master status//查看主数据库的状态

 

B服务器设置
设定/etc/my.cnf
[mysqld]区段加入

server-id = 2 (如果还有slave用户,他们的ID也随之增加,如server-id=3
master-host = 192.168.13      //
同步的master IP
master-user = slaver          //
同步用的用户名
master-password =password   //
同步用的密码

replicate-do-db =mydatabase     //设置同步的数据库,如果多个库,再重新添加一行

log_err =movivi-err.log      //设置错误日志文件名
log-slave-updates           //
同步的形式
master-port=3306           //
同步端口
master-connect-retry = 60    //
同步时间

–slave-skip-errors=1062,1053 //跳过出错的信息

–slave-skip-errors=all


//在从服务器上执行下面的语句,用你的系统的实际值替换选项值:

mysql> CHANGE MASTER TO

 ->     MASTER_HOST=’192.168.1.13′,

     ->     MASTER_USER=’slaver’,

     ->     MASTER_PASSWORD=’password’,

    ->     MASTER_LOG_FILE=’recorded_log_file_name’,//mysql-bin.0002

     ->     MASTER_LOG_POS=recorded_log_position;//show master status;

最后两行参数可以不选。或者show master status;获取主数据库binlog日志在当前时间点的状态。
重启B服务器的MYSQL
在数据库的文件夹里有master.info文件,用来查看同步信息。如果同步参数设置不正确,导致数据库不能同步,在修改了/etc/my.cnf后重启mysqlshell>stop slave Shell>start slave;它不会覆盖master.info的内容,必须先手动删除master.info再重新启动slave服务。

mysql> show processlist;   //看到两个 system user 就是正常的

Mysql> stop slave  //停止slave服务器

Mysql>start slave  //启动slave服务器,开启了slave就可以同步了

Mysql> show slave status;  //看看同步的状态

 

mysql> show slave status\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.1.13

Master_User: slaver

Master_Port: 3306

Connect_Retry: 60

 Master_Log_File: mysql-bin.000021

Read_Master_Log_Pos: 67406

Relay_Log_File: master-relay-bin.000117

Relay_Log_Pos: 2195

Relay_Master_Log_File: mysql-bin.000021

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB: mydatabase

Replicate_Ignore_DB:

Replicate_Do_Table:

eplicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 99654

Exec_Master_Log_Pos: 67406

Relay_Log_Space: 2195

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

 Seconds_Behind_Master: 0

四.测试
mastermydatabase库里建立test表,并且插入数据,然后检查slave有没有同步这些数据,就能够检查出是否设置成功。

 

五、其它

1.  mysql 并发连接问题,最大多少?同时多少用户在线, 平均每个用户多少时间访问一次页面,平均一个页面有多少个SQL查询. 平均一个SQL查询需要花费多少时间(单线程情况下).

当然这些都是平均数据, 肯定有高峰和极端情况的.此外,你的数据库SQL查询和数据库规模关系大不大, 100W条下的执行时间和1000W条下的执行时间也可能不同.基本上这样你就可以大约知道你的数据库服务器可以支持多少用户同时在线.

单线程情况下,1个查询执行10ms,那么100个查询同时执行,每个查询基本上就是等待1s(因为是单线程,也就不用考虑锁定,线程切换等开销)实际上一个Mysql做的好的话可以达到2000多Query的。这里的最大连接数并不是并发数目有不少人经常出现 超过连接数而被拒绝连接的情况,这时候可以适当增加max connetions

如果自己不是很清楚,可以设为1024

2. .查看mysql设置参数

$mysqladmin -u root -p variables;

.开启服务器

$/etc/rc.d/init.d/mysqld start

$mysqld_safe –user=mysql &

$/etc/rc.d/init.d/mysqld stop

$mysqladmin shutdown -u root -p

.优化表

mysql>optimize table tblA,tblB;

[进行优化并检查修复任务]

$mysqlcheck -o dbname tblA tblB tblC -u root -p

.对表进行分析

mysql>analyze table tblA;

$mysqlcheck -a dbname [tblA tblB tblC ] -u root -p

.对表进行检查

mysql>check table tblA,tblB,tblC;

.赋权

mysql>grant all on dbname.* to username@ identified by ‘localhostpassword’

刷新权限表

mysql>flush privileges;

 

原文 http://blog.chinaunix.net/u/19637/showart_464668.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注