学习啦——学设计>网页设计>网站建设>网站服务器管理>

MySQL怎么设置主从复制_MySQL主从复制有哪些方法

宇民分享

  MySQL是一个关系型数据库管理系统,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件。下面由学习啦小编为大家整理的MySQL主从复制的方法,希望大家喜欢!

  MySQL主从复制的方法

  设置主从复制:

  1、确保在主服务器和从服务器上安装的MySQL版本相同,并且最好是MySQL的最新稳定版本。

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

  mysql> GRANT REPLICATION SLAVE ON *.*

  -> TO 'replication'@'%.yourdomain.com' IDENTIFIED BY 'slavepass';

  3、执行FLUSH TABLES WITH READ LOCK语句清空所有表和块写入语句:

  mysql> FLUSH TABLES WITH READ LOCK;

  保持mysql客户端程序不要退出。开启另一个终端对主服务器数据目录做快照。

  shell> cd /usr/local/mysql/

  shell> tar -cvf /tmp/mysql-snapshot.tar ./data

  如果从服务器的用户账户与主服务器的不同,你可能不想复制mysql数据库。在这种情况下,应从归档中排除该数据库。你也不需要在归档中包括任何日志文件或者master.info或relay-log.info文件。

  当FLUSH TABLES WITH READ LOCK所置读锁定有效时(即mysql客户端程序不退出),读取主服务器上当前的二进制日志名和偏移量值:

  mysql > SHOW MASTER STATUS;

  +---------------+----------+--------------+------------------+

  | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

  +---------------+----------+--------------+------------------+

  | mysql-bin.003 | 73 | test | manual,mysql |

  +---------------+----------+--------------+------------------+

  File列显示日志名,而Position显示偏移量。在该例子中,二进制日志值为mysql-bin.003,偏移量为73。记录该值。以后设置从服务器时需要使用这些值。它们表示复制坐标,从服务器应从该点开始从主服务器上进行新的更新。

  如果主服务器运行时没有启用--logs-bin,SHOW MASTER STATUS显示的日志名和位置值为空。在这种情况下,当以后指定从服务器的日志文件和位置时需要使用的值为空字符串('')和4.

  取得快照并记录日志名和偏移量后,回到前一中端重新启用写活动:

  mysql> UNLOCK TABLES;

  4、确保主服务器主机上my.cnf文件的[mysqld]部分包括一个log-bin选项。该部分还应有一个server-id=Master_id选项,其中master_id必须为1到232–1之间的一个正整数值。例如:

  [mysqld]

  log-bin

  server-id=1

  如果没有提供那些选项,应添加它们并重启服务器。

  5、停止从服务器上的mysqld服务并在其my.cnf文件中添加下面的行:

  [mysqld]

  server-id=2

  slave_id值同Master_id值一样,必须为1到232–1之间的一个正整数值。并且,从服务器的ID必须与主服务器的ID不相同。

  6、将数据备据目录中。确保对这些文件和目录的权限正确。服务器 MySQL运行的用户必须能够读写文件,如同在主服务器上一样。

  Shell> chown -R mysql:mysql /usr/local/mysql/data

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

  mysql> CHANGE MASTER TO

  -> MASTER_HOST='master_host_name',

  -> MASTER_USER='replication_user_name',

  -> MASTER_PASSWORD='replication_password',

  -> MASTER_LOG_FILE='recorded_log_file_name',

  -> MASTER_LOG_POS=recorded_log_position;

  8、启动从服务器线程:

  mysql> START SLAVE;

  执行这些程序后,从服务器应连接主服务器,并补充自从快照以来发生的任何更新。

  9、如果出现复制错误,从服务器的错误日志(HOSTNAME.err)中也会出现错误消息。

  10、从服务器复制时,会在其数据目录中发现文件master.info和HOSTNAME-relay-log.info。从服务器使用这两个文件跟踪已经处理了多少主服务器的二进制日志。不要移除或编辑这些文件,除非你确切知你正在做什么并完全理解其意义。即使这样,最好是使用CHANGE MASTER TO语句。

  Mysql大小写讲解的方法

  一、1 CREATE TABLE NAME(name VARCHAR(10));

  对这个表,缺省情况下,下面两个查询的结果是一样的:

  代码如下:

  SELECT * FROM TABLE NAME WHERE name='clip';

  SELECT * FROM TABLE NAME WHERE name='Clip';

  MySql默认查询是不区分大小写的,如果需要区分他,必须在建表的时候,Binary标示敏感的属性.

  代码如下:

  CREATE TABLE NAME(

  name VARCHAR(10) BINARY

  );

  2 在SQL语句中实现 SELECT * FROM TABLE NAME WHERE BINARY name='Clip';

  3 设置字符集:

  utf8_general_ci --不区分大小写

  utf8_bin--区分大小写

  二、 MySQL在windows下是不区分大小写的

  将script文件导入MySQL后表名也会自动转化为小写,结果再 想要将数据库导出放到linux服务器中使用时就出错了。因为在linux下表名区分大小写而找不到表,查了很多都是说在linux下更改MySQL的设置使其也不区分大小写,但是有没有办法反过来让windows 下大小写敏感呢。其实方法是一样的,相应的更改windows中MySQL的设置就行了。

  具体操作:

  在MySQL的配置文件my.ini中增加一行:

  lower_case_table_names = 0

  其中 0:区分大小写,1:不区分大小写

  MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:

  1、数据库名与表名是严格区分大小写的;

  2、表的别名是严格区分大小写的;

  3、列名与列的别名在所有的情况下均是忽略大小写的;

  4、变量名也是严格区分大小写的;

  MySQL四舍五入是什么

  一、FLOOR(X)

  1.返回不大于X的最大整数值。

  MySQL> select FLOOR(1.23);

  -> 1

  MySQL> select FLOOR(-1.23);

  -> -2

  注意返回值被变换为一个BIGINT!

  二、CEILING(X)

  2.返回不小于X的最小整数值。

  MySQL> select CEILING(1.23);

  -> 2

  MySQL> select CEILING(-1.23);

  -> -1

  注意返回值被变换为一个BIGINT!

  三、ROUND(X)

  3.返回参数X的MySQL四舍五入的一个整数。

  MySQL> select ROUND(-1.23);

  -> -1

  MySQL> select ROUND(-1.58);

  -> -2

  MySQL> select ROUND(1.58);

  -> 2

  注意返回值被变换为一个BIGINT!

  四、ROUND(X,D)

  4.返回参数X的四舍五入的有D为小数的一个数字。如果D为0,结果将没有小数点或小数部分。

  MySQL> select ROUND(1.298, 1);

  -> 1.3

  MySQL> select ROUND(1.298, 0);

  -> 1

  注意返回值被变换为一个BIGINT!