主从架构[一主多从]升级步骤


1. 首先安装最新版本的MySQL  mysql-5.6.26.tar.gz  

   :每台主机分别安装目录:/usr/local/mysql-5.6


yum install libaio-devel 


   编译参数


/usr/local/cmake/bin/cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6 \

-DMYSQL_DATADIR=/usr/local/mysql-5.6/data \

-DWITH_MYISAM_STORAGE_ENGINE=1 \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DWITH_ARCHIVE_STORAGE_ENGINE=1 \

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \

-DENABLE_LOCAL_INFILE=1 \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci \

-DEXTRA_CHARSETS=all \

-DMYSQL_TCP_PORT=3306 \

-DWITH_DEBUG=OFF \

-DWITH_READLINE=1 \

-DWITH_EMBEDDED_SERVER=1 \

-DMYSQL_UNIX_ADDR=/tmp/mysql6.sock \

-DWITH_SSL=bundled \

-DENABLE_DTRACE=OFF 




make;make install


软件安装OK



2. 停止其中一个从库:

   将原版本中的数据[data]目录[/usr/local/mysql]拷贝到新版本对应的目录下面[/usr/local/mysql-5.6]

    cp -r /usr/local/mysql/data    /usr/local/mysql-5.6/


3. 变更权限:

   chown -R root .

   chown -R mysql data

   

4. 变更启动脚本

   rm -f /etc/init.d/mysqld

   cp /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysqld-5.5

   cp /usr/local/mysql-5.6/support-files/mysql.server  /etc/init.d/mysqld-5.6

   chmod +x  /etc/init.d/mysqld-5.*


5.启动新版本实例

  注意:配置文件必须配置正确,如果配置了旧的参数,会导致实例无法启动

  /etc/init.d/mysqld-5.6 start

  然后观察错误文件,会看到如下报错:

   2015-08-04 13:16:31 18815 [ERROR] Native table 'performance_schema'.'setup_actors' has the wrong structure

   2015-08-04 13:16:31 18815 [ERROR] Native table 'performance_schema'.'setup_objects' has the wrong structure

   2015-08-04 13:16:31 18815 [ERROR] Native table 'performance_schema'.'table_io_waits_summary_by_index_usage' has the wrong structure

   2015-08-04 13:16:31 18815 [ERROR] Native table 'performance_schema'.'table_io_waits_summary_by_table' has the wrong structure

   2015-08-04 13:16:31 18815 [ERROR] Native table 'performance_schema'.'table_lock_waits_summary_by_table' has the wrong structure

   2015-08-04 13:16:31 18815 [ERROR] Column count of mysql.threads is wrong. Expected 14, found 3. Created with MySQL 50518, now running 50626. Please use mysql_upgrade to fix this error.

   2015-08-04 13:16:31 18815 [ERROR] Native table 'performance_schema'.'events_stages_current' has the wrong structure

   2015-08-04 13:16:31 18815 [ERROR] Native table 'performance_schema'.'events_stages_history' has the wrong structure

   2015-08-04 13:16:31 18815 [ERROR] Native table 'performance_schema'.'events_stages_history_long' has the wrong structure

   2015-08-04 13:16:31 18815 [ERROR] Native table 'performance_schema'.'events_stages_summary_by_thread_by_event_name' has the wrong structure

   2015-08-04 13:16:31 18815 [ERROR] Native table 'performance_schema'.'events_stages_summary_by_account_by_event_name' has the wrong structure

   2015-08-04 13:16:31 18815 [ERROR] Native table 'performance_schema'.'events_stages_summary_by_user_by_event_name' has the wrong structure

   2015-08-04 13:16:31 18815 [ERROR] Native table 'performance_schema'.'events_stages_summary_by_host_by_event_name' has the wrong structure


6. 运行新版本下的升级脚本进行升级检查,修复mysql库中的主要表

   /usr/local/mysql-5.6/bin/mysql_upgrade -u root -proot

   Warning: Using a password on the command line interface can be insecure.

   Looking for 'mysql' as: /usr/local/mysql_5.6/bin/mysql

   Looking for 'mysqlcheck' as: /usr/local/mysql-5.6/bin/mysqlcheck

   Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/tmp/mysql6.sock' 

   Warning: Using a password on the command line interface can be insecure.

   Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/tmp/mysql6.sock' 

   Warning: Using a password on the command line interface can be insecure.

   mysql.columns_priv                                 OK

   mysql.db                                           OK

   mysql.event                                        OK

   mysql.func                                         OK

   mysql.general_log                                  OK

   mysql.help_category                                OK

   mysql.help_keyword                                 OK

   mysql.help_relation                                OK

   mysql.help_topic                                   OK

   mysql.host                                         OK

   mysql.innodb_index_stats                           OK

   mysql.innodb_table_stats                           OK

   mysql.ndb_binlog_index                             OK

   mysql.plugin                                       OK

   mysql.proc                                         OK

   mysql.procs_priv                                   OK

   mysql.proxies_priv                                 OK

   mysql.servers                                      OK

   mysql.slave_master_info                            OK

   mysql.slave_relay_log_info                         OK

   mysql.slave_worker_info                            OK

   mysql.slow_log                                     OK

   mysql.tables_priv                                  OK

   mysql.time_zone                                    OK

   mysql.time_zone_leap_second                        OK

   mysql.time_zone_name                               OK

   mysql.time_zone_transition                         OK

   mysql.time_zone_transition_type                    OK

   mysql.user                                         OK

   Running 'mysql_fix_privilege_tables'...

   Warning: Using a password on the command line interface can be insecure.

   Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/tmp/mysql6.sock' 

   Warning: Using a password on the command line interface can be insecure.

   Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/tmp/mysql6.sock' 

   Warning: Using a password on the command line interface can be insecure.

   babysitter.abc                                     OK

   babysitter.account_tactics_daily_availability      OK

   babysitter.andtlhz_new                             OK


7. 检查完后重启实例

   /etc/init.d/mysqld-5.6 restart






配置文件


   [client]

   #default-character-set   = utf8

   port                    = 3306

   socket                  = /tmp/mysql6.sock

   

   [mysqld]

   

   #skip-grant-tables

   user                    = mysql

   port                    = 3306

   socket                  = /tmp/mysql6.sock

   pid-file                = /usr/local/mysql-5.6/data/mysql-upgrade-master.pid

   #pid-file                = /usr/local/mysql-5.6/data/[主机名].pid

   #pid-file                = /usr/local/mysql-5.6/data/[主机名].pid

   

   ##################

   

   basedir                 = /usr/local/mysql-5.6

   datadir                 = /usr/local/mysql-5.6/data

   

   server-id               = 1

   #server-id               = 2  #从库1配置

   #server-id               = 3  #从库2配置

   

   log_slave_updates       = 1

   log_slave_updates       = 0  #从库配置

   log-bin                 = mysql-bin

   #log-bin                 = mysql-bin   #从库不需要开启binlog

   

   binlog_format           = mixed

   binlog_cache_size       = 64M

   max_binlog_cache_size   = 128M

   expire_logs_days        = 2

   max_binlog_size         = 1G

   binlog-ignore-db        = mysql

   binlog-ignore-db        = test

   binlog-ignore-db        = information_schema

   binlog-ignore-db        = performance_schema

   query_cache_type =0

   

   key_buffer_size         = 384M

   sort_buffer_size        = 2M

   read_buffer_size        = 2M

   read_rnd_buffer_size    = 16M

   join_buffer_size        = 2M

   thread_cache_size       = 8

   query_cache_size        = 32M

   query_cache_limit       = 2M

   query_cache_min_res_unit = 2K

   thread_concurrency      = 32

   

   table_open_cache        = 512

   open_files_limit        = 10240

   back_log                = 600

   max_connections         = 5000

   max_connect_errors      = 6000

   external-locking        = FALSE

   

   max_allowed_packet      = 10M

   default-storage-engine  = MYISAM

   thread_stack            = 192K

   transaction_isolation   = READ-COMMITTED

   tmp_table_size          = 256M

   max_heap_table_size     = 512M

   

   bulk_insert_buffer_size = 64M

   long_query_time         = 2

   slow_query_log

   slow_query_log_file     = /usr/local/mysql-5.6/data/slow_query.log

   skip-name-resolve

   explicit_defaults_for_timestamp = true  #新版本关于时间戳的新特性配置

   

   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   = 1

   innodb_flush_method = O_DIRECT

   

   

   [mysqldump]

   quick

   max_allowed_packet   = 10M

   

   [mysql]

   no-auto-rehash

   safe-updates

   

   [mysqlhotcopy]

   interactive-timeout

   

   [myisamchk]

   key_buffer_size = 256M

   sort_buffer_size = 256M

   read_buffer = 2M

   write_buffer = 2M

   

   ##################

   

   

   以上操作顺序为:从1》从2》主

   特别注意配置文件的正确性

   磁盘空间足够存放两份旧数据的大小

   旧数据不动,以防升级失败,可以回退到旧版本