• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

mysql主从筹建实现

mysql 搞代码 7年前 (2018-06-04) 142次浏览 已收录 0个评论

mysql主从搭建实现

MySQL是应用广泛的关系型数据库,当数据规模逐渐扩大,并且重要性不断提高的情况下,单数据库的可靠性和性能受到严重挑战,所以就会有了主从,读写分离等需求了。

首先在2台linux下安装mysql,最好是内网机器,可以用内网网卡做主从同步,网络质量和安全都可以得到保证。

1、安装一些常用包:

yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers

yum -y install perl perl-URI perl-DBI perl-String newt-perl

2、下载并安装mysql

wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.3-m3.tar.gz/from/http://mysql.he.net/

tar -zxf mysql-5.5.3-m3.tar.gz

3、编译安装mysql

cd mysql-5.5.3-m3

./configure –prefix=/usr/local/mysql –enable-assembler –with-extra-charsets=complex –enable-thread-safe-client –with-big-tables –with-readline –with-ssl –with-embedded-server –enable-local-infile –with-plugins=partition,innobase,myisammrg &&make &&make install

4、建立mysql用户和数据文件夹等

/usr/sbin/groupadd mysql

/usr/sbin/useradd -g mysql mysql

chown -R mysql:mysql /usr/local/mysql
mkdir -p /home/mysql/data

mkdir -p /home/mysql/binlog
mkdir -p /home/mysql/relaylog

chown -R mysql:mysql /home/mysql/*

5、初始化数据库

/usr/local/mysql/bin/mysql_install_db –basedir=/usr/local/mysql –datadir=/home/mysql/data –user=mysql

6、建立mysql启动 关闭脚本:vim /etc/init.d/mysql 如下:

#!/bin/sh   mysql_port=3306  mysql_username="root" //这里要修改  mysql_password="12345" //这里要修改  function_start_mysql()  {       printf "Starting MySQL.../n"       /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/home/mysql/my.cnf 2>&1 > /dev/null &  }   function_stop_mysql()  {       printf "Stoping MySQL.../n"       /usr/local/mysql/bin/mysqladmin -u ${mysql_username} -p${mysql_password} -S /tmp/mysql.sock shutdown  }   function_restart_mysql()  {       printf "Restarting MySQL.../n"        function_stop_mysql      sleep 5       function_start_mysql }   function_kill_mysql()  {       kill -9 $(ps -ef |grep 'bin/mysqld_safe'| grep ${mysql_port} | awk '{printf $2}')       kill -9 $(ps -ef |grep 'libexec/mysqld' | grep ${mysql_port} | awk '{printf $2}')  }  if [ "$1" = "start" ]; then       function_start_mysql  elif [ "$1" = "stop" ]; then       function_stop_mysql  elif [ "$1" = "restart" ]; then       function_restart_mysql  elif [ "$1" = "kill" ]; then       function_kill_mysql else       printf "Usage: /home/mysql/mysql {start;stop;restart;kill}/n"   fi

欢迎大家阅读《mysql主从筹建实现》,跪求各位点评,by 搞代码

 7、建立mysql配置文件:vim /home/mysql/my.cnf

主从的配置文件差异就在一个地方,主数据库这个值如下:

server-id = 1 从数据库不等于1就可以了

[client]   character-set-server = utf8  port = 3306 socket = /tmp/mysql.sock  [mysqld]   character-set-server = utf8  replicate-ignore-db = mysql  replicate-ignore-db = test  replicate-ignore-db = information_schema  user = mysql  port = 3306 socket = /tmp/mysql.sock  basedir = /usr/local/mysql  datadir = /home/mysql/data log-error = /home/mysql/mysql_error.log   pid-file = /home/mysql/mysql.pid  open_files_limit = 10240  back_log = 600  max_connections = 5000  max_connect_errors = 6000  table_cache = 614  external-locking = FALSE   max_allowed_packet = 32M  sort_buffer_size = 1M  join_buffer_size = 1M  thread_cache_size = 300 #thread_concurrency = 8   query_cache_size = 512M  query_cache_limit = 2M  query_cache_min_res_unit = 2k  default-storage-engine = MyISAM  thread_stack = 192K  transaction_isolation = READ-COMMITTED  tmp_table_size = 246M  max_heap_table_size = 246M  long_query_time = 3 log-slave-updates log-bin = /home/mysql/binlog/binlog  binlog_cache_size = 4M  binlog_format = MIXED  max_binlog_cache_size = 8M  max_binlog_size = 1G  relay-log-index = /home/mysql/relaylog/relaylog  relay-log-info-file = /home/mysql/relaylog/relaylog  relay-log = /home/mysql/relaylog/relaylog  expire_logs_days = 30  key_buffer_size = 256M  read_buffer_size = 1M  read_rnd_buffer_size = 16M  bulk_insert_buffer_size = 64M  myisam_sort_buffer_size = 128M  myisam_max_sort_file_size = 10G  myisam_repair_threads = 1  myisam_recover  interactive_timeout = 120  wait_timeout = 120  skip-name-resolve #master-connect-retry = 10   slave-skip-errors = 1032,1062,126,1114,1146,1048,1396 #master-host = 192.168.1.2  #master-user = username  #master-password = password  #master-port = 3306   server-id = 1  innodb_additional_mem_pool_size = 16M  innodb_buffer_pool_size = 512M  innodb_data_file_path = ibdata1:256M:autoextend  innodb_file_io_threads = 4  innodb_thread_concurrency = 8  innodb_flush_log_at_trx_commit = 2  innodb_log_buffer_size = 16M  innodb_log_file_size = 128M  innodb_log_files_in_group = 3  innodb_max_dirty_pages_pct = 90  innodb_lock_wait_timeout = 120  innodb_file_per_table = 0  #log-slow-queries = /home/mysql/slow.log  #long_query_time = 10   [mysqldump]   quick  max_allowed_packet = 32M

 8、主从都完成以上步骤,然后启动mysql:sh /etc/init.d/mysql start

9、登录主数据库就行授权

GRANT REPLICATION SLAVE ON *.* TO ‘slave’@’192.168.1.2 identified by ‘123456’;

10、查询主数据库状态,如下:

[root@test ~]# mysql -u root -p -S /tmp/mysql.sock
Enter password:
Welcome to the MySQL monitor. Commands end with ; or /g.
Your MySQL connection id is 3447543 to server version: 5.1.36-log

Type ‘help;’ or ‘/h’ for help. Type ‘/c’ to clear the buffer.

mysql> show master status;
+——————+———–+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———–+————–+——————+
| mysql-bin.000113 | 403767838 | | |
+——————+———–+————–+——————+
1 row in set (0.00 sec)

11、配置从数据库

mysql> change master to master_host=’192.168.1.1′, master_user=’slave’, master_password=’123456′, master_log_file=’mysql-bin.000113′, master_log_pos=403767838;

正确执行后再执行:
mysql> start slave;

检查下运行状况:

mysql> show slave status/G
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect…
Connection id: 596
Current database: *** NONE ***

*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.1
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: binlog.000001
Read_Master_Log_Pos: 4120647
Relay_Log_File: relaylog.000214
Relay_Log_Pos: 248
Relay_Master_Log_File: binlog.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB: mysql,test
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: 4120647
Relay_Log_Space: 538
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
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 2013
Last_IO_Error: error reconnecting to master ‘[email protected]:3306’ – retry-time: 60 retries: 86400
Last_SQL_Errno: 0
Last_SQL_Error:
1 row in set (0.00 sec)

当Slave_IO_Running: Yes和Slave_SQL_Running: Yes 都是Yes就说明正常。

12、验证是否成功

在主数据库上新建一个数据库,查看从数据库是不是也有了这个数据库;新建一张表或者插入一条记录,查看从数据库是否同步更新。

主数据库有数据的情况:
1、数据库锁表操作,不让数据再进行写入动作。mysql> FLUSH TABLES WITH READ LOCK;
2、察看主数据库的状态 mysql> show master status; 照前面记录输出值。
3、把主服务器数据文件复制到从服务器,最好先用压缩处理一下。
4、取消主数据库锁定 mysql> UNLOCK TABLES;
5、从服务器的操作和之前一样。记得先stop slave 然后start slave

 

 


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:mysql主从筹建实现

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址