Site Tools


Hotfix release available: 2025-05-14b "Librarian". upgrade now! [56.2] (what's this?)
Hotfix release available: 2025-05-14a "Librarian". upgrade now! [56.1] (what's this?)
New release available: 2025-05-14 "Librarian". upgrade now! [56] (what's this?)
Hotfix release available: 2024-02-06b "Kaos". upgrade now! [55.2] (what's this?)
Hotfix release available: 2024-02-06a "Kaos". upgrade now! [55.1] (what's this?)
New release available: 2024-02-06 "Kaos". upgrade now! [55] (what's this?)
Hotfix release available: 2023-04-04b "Jack Jackrum". upgrade now! [54.2] (what's this?)
Hotfix release available: 2023-04-04a "Jack Jackrum". upgrade now! [54.1] (what's this?)
New release available: 2023-04-04 "Jack Jackrum". upgrade now! [54] (what's this?)
Hotfix release available: 2022-07-31b "Igor". upgrade now! [53.1] (what's this?)
Hotfix release available: 2022-07-31a "Igor". upgrade now! [53] (what's this?)
New release available: 2022-07-31 "Igor". upgrade now! [52.2] (what's this?)
New release candidate 2 available: rc2022-06-26 "Igor". upgrade now! [52.1] (what's this?)
New release candidate available: 2022-06-26 "Igor". upgrade now! [52] (what's this?)
Hotfix release available: 2020-07-29a "Hogfather". upgrade now! [51.4] (what's this?)
New release available: 2020-07-29 "Hogfather". upgrade now! [51.3] (what's this?)
New release candidate 3 available: 2020-06-09 "Hogfather". upgrade now! [51.2] (what's this?)
New release candidate 2 available: 2020-06-01 "Hogfather". upgrade now! [51.1] (what's this?)
New release candidate available: 2020-06-01 "Hogfather". upgrade now! [51] (what's this?)
Hotfix release available: 2018-04-22c "Greebo". upgrade now! [50.3] (what's this?)
Hotfix release available: 2018-04-22b "Greebo". upgrade now! [50.2] (what's this?)
0000016:separate_the_read_writes_to_different_db

Install multi_db gem

This is required for rails to direct writes to master and reads to slave database. For details refer to https://github.com/schoefmax/multi_db

sudo gem install schoefmax-multi_db --source http://gems.github.com

Setting Master/Slave environment for Mysql

Assuming that 2 database servers are setup and both the servers should be listening on a network IP. For detailed steps to setup master/slave refer to http://dev.mysql.com/doc/refman/5.1/en/replication-howto.html

1. Setting the Replication Master Configuration

Edit my.cnf and add following entries under mysqld section

server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
binlog_do_db            = crossbow_development

2. Setting the Replication Slave Configuration

Add following to my.cnf under mysqld section. This can be any unique number, used to identify the slave.

server-id               = 2

3. Create a user for replication on master

In the master Database do the following

CREATE USER 'repl' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO repl;

4. Obtaining the Replication Master Binary Log Coordinates

- Stop processing statements on the master and lock the tables by issuing FLUSH TABLES WITH READ LOCK; - mysql> FLUSH TABLES WITH READ LOCK; - Leave the client from which you issued the FLUSH TABLES statement running so that the read lock remains in effect. If you exit the client, the lock is released. - Open mysql session in other window and determine current binary log name and position by issuing

mysql> SHOW MASTER STATUS;
This should show data similar to this. Note this information as it will be required when setting up the slave.
File Position Binlog_Do_DB Binlog_Ignore_D
mysql-bin.000006 106 crossbow_dev

5. Create a Data Snapshot Using mysqldump

Do following on the console

- mysqldump -uroot -p crossbow_development --master-data > dbdump.db

6. Perform following steps on machine where the Slave is to be setup

- Start the mysql with –skip-slave-start option to prevent the replication from starting.

mysqld --skip-slave-start

- Create the database and import the db dump taken from master

mysql> CREATE DATABASE crossbow_development;
mysql> exit

- Restore the data snapshot that was taken from the master

root@root# mysql crossbow_development < dbdump.db

- Setup the slave to communicate to master. The MASTER_LOG_FILE and MASTER_LOG_POS should be the values that were returned by Step 4.

 
mysql>CHANGE MASTER TO MASTER_HOST='192.168.0.201', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=106;
mysql>START SLAVE;

Issues with broken Master_Slave relationship

Master ahead of slave @ April 25th, 2014 *COMPLETE, here for future reference*

Master:

mysql> show master status \G;
*************************** 1. row ***************************
            File: cbprd.000211
        Position: 754221
    Binlog_Do_DB: 
Binlog_Ignore_DB: 
1 row in set (0.00 sec)

Slave:

mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: 
                  Master_Host: 10.166.152.12
                  Master_User: replcbusr
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: cbprd.000210
          Read_Master_Log_Pos: 7840772
               Relay_Log_File: proddb-slav01-relay-bin.000424
                Relay_Log_Pos: 4
        Relay_Master_Log_File: cbprd.000210
             Slave_IO_Running: No
            Slave_SQL_Running: No
              Replicate_Do_DB: 
          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: 7840772
              Relay_Log_Space: 107
              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: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 1236
                Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position'
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
1 row in set (0.00 sec)

The log file size is quite different, as evident from current log pos!
Also, a look at the log file shows that master and slave are working on two different log files, which explains the size difference.

Recovery

  1. stop app serversstopped apache, maintenance page.
  2. stop slave on db slave
stop slave;

mysql> stop slave
    -> ;
Query OK, 0 rows affected (0.80 sec)
  1. Take db backup on master using mysqldump. DB name:cbprod
mysqldump -u<user> -p<pass> cbprod > dbbkp_april24.2014.sql
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2014-04-25  1:30:08
  1. record show master values;
mysql> show master status;
+--------------+----------+--------------+------------------+
| File         | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------+----------+--------------+------------------+
| cbprd.000211 |   819653 |              |                  |
+--------------+----------+--------------+------------------+
1 row in set (0.00 sec)
  1. Take db backup on slave using mysqldump
[root@proddb-slav01 ~]# tail ~/dbbkp_slave_april24_2014.sql 

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2014-04-25  1:33:52
  1. Restore Master dump on Slave
#step1
[root@proddb-mast01 ~]# scp ~/dbbkp_april24.2014.sql root@10.166.152.13:/tmp
root@10.166.152.13's password: 
dbbkp_april24.2014.sql                                                     100%  111MB  55.3MB/s   00:02    
[root@proddb-mast01 ~]

#step2
[root@proddb-slav01 tmp]# mysql -u cbpuser -p cbprod < /tmp/dbbkp_april24.2014.sql 
Enter password: 

#step3 
[root@proddb-slav01 tmp]# mysqlcheck -u cbpuser -p --databases cbprod
Enter password: 
cbprod.activities                                  OK
cbprod.ads                                         OK
cbprod.albums                                      OK
cbprod.annotations                                 OK
cbprod.announcements                               OK
cbprod.answers                                     OK
cbprod.assets                                      OK
cbprod.attendees                                   OK
cbprod.audio_annotations                           OK
cbprod.billing_addresses                           OK
cbprod.bookmarks                                   OK
cbprod.carts                                       OK
cbprod.categories                                  OK
cbprod.category_associations                       OK
cbprod.certificate_templates                       OK
cbprod.certificates                                OK
cbprod.certification_questionnaires                OK
cbprod.certifications                              OK
cbprod.choices                                     OK
cbprod.client_applications                         OK
cbprod.clippings                                   OK
cbprod.comments                                    OK
cbprod.companies                                   OK
cbprod.company_email_domains                       OK
cbprod.contact_us                                  OK
cbprod.content_availabilities                      OK
cbprod.content_versions                            OK
cbprod.contents                                    OK
cbprod.contests                                    OK
cbprod.countries                                   OK
cbprod.coupon_usages                               OK
cbprod.coupons                                     OK
cbprod.course_contents                             OK
cbprod.course_prerequisites                        OK
cbprod.courses                                     OK
cbprod.css_rules                                   OK
cbprod.delayed_jobs                                OK
cbprod.disable_company_features                    OK
cbprod.disk_usages                                 OK
cbprod.drop_box_associations                       OK
cbprod.enrollments                                 OK
cbprod.events                                      OK
cbprod.favorites                                   OK
cbprod.featured_items                              OK
cbprod.folder_items                                OK
cbprod.folders                                     OK
cbprod.follows                                     OK
cbprod.footer_contents                             OK
cbprod.forums                                      OK
cbprod.friendship_statuses                         OK
cbprod.friendships                                 OK
cbprod.group_memberships                           OK
cbprod.group_topics                                OK
cbprod.groups                                      OK
cbprod.homepage_features                           OK
cbprod.homepage_highlights                         OK
cbprod.in_person_event_instructors                 OK
cbprod.in_person_events                            OK
cbprod.invitations                                 OK
cbprod.invites                                     OK
cbprod.likes                                       OK
cbprod.live_event_associations                     OK
cbprod.live_events                                 OK
cbprod.meetings                                    OK
cbprod.merchant_accounts                           OK
cbprod.messages                                    OK
cbprod.metro_areas                                 OK
cbprod.moderatorships                              OK
cbprod.monitorships                                OK
cbprod.oauth_nonces                                OK
cbprod.oauth_tokens                                OK
cbprod.offerings                                   OK
cbprod.orders                                      OK
cbprod.pages                                       OK
cbprod.panel_positions                             OK
cbprod.payment_transactions                        OK
cbprod.payments                                    OK
cbprod.permalinks                                  OK
cbprod.photos                                      OK
cbprod.plugin_schema_migrations                    OK
cbprod.polls                                       OK
cbprod.posts                                       OK
cbprod.privileges                                  OK
cbprod.privileges_roles                            OK
cbprod.product_coupons                             OK
cbprod.product_groups                              OK
cbprod.product_questions                           OK
cbprod.product_subscription_settings               OK
cbprod.products                                    OK
cbprod.progress_breakups                           OK
cbprod.progress_scores                             OK
cbprod.purchases                                   OK
cbprod.question_groups                             OK
cbprod.question_pool_questions                     OK
cbprod.question_pools                              OK
cbprod.question_types                              OK
cbprod.questionnaire_questions                     OK
cbprod.questionnaires                              OK
cbprod.questions                                   OK
cbprod.rates                                       OK
cbprod.ratings                                     OK
cbprod.recommendation_users                        OK
cbprod.recommendations                             OK
cbprod.response_sets                               OK
cbprod.responses                                   OK
cbprod.roles                                       OK
cbprod.rsvps                                       OK
cbprod.sb_posts                                    OK
cbprod.schema_migrations                           OK
cbprod.scorm_package_details                       OK
cbprod.scorm_packages                              OK
cbprod.scorm_sessions                              OK
cbprod.selections                                  OK
cbprod.sessions                                    OK
cbprod.settings                                    OK
cbprod.site_custom_plans                           OK
cbprod.site_order_items                            OK
cbprod.site_orders                                 OK
cbprod.site_payments                               OK
cbprod.site_subscriptions                          OK
cbprod.site_usages                                 OK
cbprod.skills                                      OK
cbprod.slugs                                       OK
cbprod.sso_settings                                OK
cbprod.states                                      OK
cbprod.subscription_plans                          OK
cbprod.subscription_settings                       OK
cbprod.subscriptions                               OK
cbprod.taggings                                    OK
cbprod.tags                                        OK
cbprod.topics                                      OK
cbprod.translations                                OK
cbprod.user_invitations                            OK
cbprod.user_removed_announcements                  OK
cbprod.user_subscription_coupon_details            OK
cbprod.user_subscription_histories                 OK
cbprod.user_subscriptions                          OK
cbprod.users                                       OK
cbprod.voice_extensions                            OK
cbprod.votes                                       OK
cbprod.web_links                                   OK
cbprod.web_texts                                   OK
  1. change master with values recorded above, emphasis on log and pos. (similar statement as above but with values current values from master)
mysql> change master to master_log_file='cbprd.000211', master_log_pos=819653;
Query OK, 0 rows affected (0.02 sec)
  1. start slave
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.166.152.12
                  Master_User: replcbusr
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: cbprd.000211
          Read_Master_Log_Pos: 819653
               Relay_Log_File: proddb-slav01-relay-bin.000002
                Relay_Log_Pos: 249
        Relay_Master_Log_File: cbprd.000211
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          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: 819653
              Relay_Log_Space: 413
              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: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
1 row in set (0.00 sec)

ERROR: 
No query specified
  1. remove maint page
  2. verify SOLR
  3. request Parlee to test
0000016/separate_the_read_writes_to_different_db.txt · Last modified: 2018/08/31 16:16 (external edit)