[{"data":1,"prerenderedAt":1039},["ShallowReactive",2],{"navigation_docs":3,"-engineering-database-connection":279,"-engineering-database-connection-surround":1034},[4,8,67,96,162,186,199,216,275],{"title":5,"path":6,"stem":7},"Introduction","\u002Fintroduction","0.introduction",{"title":9,"path":10,"stem":11,"children":12,"page":62},"Company","\u002Fcompany","1.company",[13,17,21,25,29,33,37,41,45,49,63],{"title":14,"path":15,"stem":16},"About","\u002Fcompany\u002Fabout","1.company\u002F0.about",{"title":18,"path":19,"stem":20},"Values","\u002Fcompany\u002Fvalues","1.company\u002F1.values",{"title":22,"path":23,"stem":24},"Communication","\u002Fcompany\u002Fcommunication","1.company\u002Fcommunication",{"title":26,"path":27,"stem":28},"Competition","\u002Fcompany\u002Fcompetition","1.company\u002Fcompetition",{"title":30,"path":31,"stem":32},"Hybrid Working","\u002Fcompany\u002Fhybrid-working","1.company\u002Fhybrid-working",{"title":34,"path":35,"stem":36},"Manchester Office","\u002Fcompany\u002Foffice","1.company\u002Foffice",{"title":38,"path":39,"stem":40},"Operations","\u002Fcompany\u002Foperations","1.company\u002Foperations",{"title":42,"path":43,"stem":44},"Policies","\u002Fcompany\u002Fpolicies","1.company\u002Fpolicies",{"title":46,"path":47,"stem":48},"Product Strategy","\u002Fcompany\u002Fproduct-strategy","1.company\u002Fproduct-strategy",{"title":50,"path":51,"stem":52,"children":53,"page":62},"Products","\u002Fcompany\u002Fproducts","1.company\u002Fproducts",[54,58],{"title":55,"path":56,"stem":57},"Capability Exchange","\u002Fcompany\u002Fproducts\u002Fcapability-exchange","1.company\u002Fproducts\u002Fcapability-exchange",{"title":59,"path":60,"stem":61},"ESProfiler Platform","\u002Fcompany\u002Fproducts\u002Fesprofiler","1.company\u002Fproducts\u002Fesprofiler",false,{"title":64,"path":65,"stem":66},"Security","\u002Fcompany\u002Fsecurity","1.company\u002Fsecurity",{"title":68,"path":69,"stem":70,"children":71,"page":62},"People Ops","\u002Fpeople-ops","2.people-ops",[72,76,80,84,88,92],{"title":73,"path":74,"stem":75},"Compensation","\u002Fpeople-ops\u002Fcompensation","2.people-ops\u002Fcompensation",{"title":77,"path":78,"stem":79},"Education","\u002Fpeople-ops\u002Feducation","2.people-ops\u002Feducation",{"title":81,"path":82,"stem":83},"Expenses","\u002Fpeople-ops\u002Fexpenses","2.people-ops\u002Fexpenses",{"title":85,"path":86,"stem":87},"Holiday & Leave","\u002Fpeople-ops\u002Fleave","2.people-ops\u002Fleave",{"title":89,"path":90,"stem":91},"Onboarding","\u002Fpeople-ops\u002Fonboarding","2.people-ops\u002Fonboarding",{"title":93,"path":94,"stem":95},"Recruitment","\u002Fpeople-ops\u002Frecruitment","2.people-ops\u002Frecruitment",{"title":97,"path":98,"stem":99,"children":100,"page":62},"Engineering","\u002Fengineering","3.engineering",[101,105,109,113,125,146,150,154,158],{"title":102,"path":103,"stem":104},"Development Setup","\u002Fengineering\u002Fdevelopment-setup","3.engineering\u002F1.development-setup",{"title":106,"path":107,"stem":108},"Contributing","\u002Fengineering\u002Fcontributing","3.engineering\u002Fcontributing",{"title":110,"path":111,"stem":112},"Production Database","\u002Fengineering\u002Fdatabase-connection","3.engineering\u002Fdatabase-connection",{"title":114,"path":115,"stem":116,"children":117},"Deployment","\u002Fengineering\u002Fdeployment","3.engineering\u002Fdeployment",[118,121],{"title":55,"path":119,"stem":120},"\u002Fengineering\u002Fdeployment\u002Fcapability-exchange","3.engineering\u002Fdeployment\u002Fcapability-exchange",{"title":122,"path":123,"stem":124},"Platform","\u002Fengineering\u002Fdeployment\u002Fplatform","3.engineering\u002Fdeployment\u002Fplatform",{"title":126,"path":127,"stem":128,"children":129,"page":62},"Github","\u002Fengineering\u002Fgithub","3.engineering\u002Fgithub",[130,134,138,142],{"title":131,"path":132,"stem":133},"Packages","\u002Fengineering\u002Fgithub\u002Fpackages","3.engineering\u002Fgithub\u002Fpackages",{"title":135,"path":136,"stem":137},"Personal Access Token","\u002Fengineering\u002Fgithub\u002Fpersonal-access-token","3.engineering\u002Fgithub\u002Fpersonal-access-token",{"title":139,"path":140,"stem":141},"Troubleshooting","\u002Fengineering\u002Fgithub\u002Ftroubleshooting","3.engineering\u002Fgithub\u002Ftroubleshooting",{"title":143,"path":144,"stem":145},"Workflows","\u002Fengineering\u002Fgithub\u002Fworkflows","3.engineering\u002Fgithub\u002Fworkflows",{"title":147,"path":148,"stem":149},"Platform Ops","\u002Fengineering\u002Fplatform-ops","3.engineering\u002Fplatform-ops",{"title":151,"path":152,"stem":153},"Project Management","\u002Fengineering\u002Fproject-management","3.engineering\u002Fproject-management",{"title":155,"path":156,"stem":157},"Releases","\u002Fengineering\u002Frelease","3.engineering\u002Frelease",{"title":159,"path":160,"stem":161},"Tools","\u002Fengineering\u002Ftools","3.engineering\u002Ftools",{"title":163,"path":164,"stem":165,"children":166,"page":62},"Design","\u002Fdesign","4.design",[167,171,175,179,182],{"title":168,"path":169,"stem":170},"Branding","\u002Fdesign\u002Fbranding","4.design\u002Fbranding",{"title":172,"path":173,"stem":174},"Design Thinking","\u002Fdesign\u002Fdesign-thinking","4.design\u002Fdesign-thinking",{"title":176,"path":177,"stem":178},"Figma","\u002Fdesign\u002Ffigma-structure","4.design\u002Ffigma-structure",{"title":159,"path":180,"stem":181},"\u002Fdesign\u002Ftools","4.design\u002Ftools",{"title":183,"path":184,"stem":185},"Customer Success","\u002Fdesign\u002Fworking-with-customers","4.design\u002Fworking-with-customers",{"title":187,"path":188,"stem":189,"children":190,"page":62},"Sales","\u002Fsales","4.sales",[191,195],{"title":192,"path":193,"stem":194},"Customer Onboarding","\u002Fsales\u002Fonboarding","4.sales\u002Fonboarding",{"title":196,"path":197,"stem":198},"Sales Tools","\u002Fsales\u002Ftools","4.sales\u002Ftools",{"title":200,"path":201,"stem":202,"children":203,"page":62},"Marketing","\u002Fmarketing","5.marketing",[204,208,212],{"title":205,"path":206,"stem":207},"Content","\u002Fmarketing\u002Fcontent","5.marketing\u002Fcontent",{"title":209,"path":210,"stem":211},"Messaging","\u002Fmarketing\u002Fmessaging","5.marketing\u002Fmessaging",{"title":213,"path":214,"stem":215},"Website","\u002Fmarketing\u002Fwebsite","5.marketing\u002Fwebsite",{"title":217,"path":218,"stem":219,"children":220,"page":62},"AI & Data Ops","\u002Fdata-ops","6.data-ops",[221,229,233,258,271],{"title":55,"path":222,"stem":223,"children":224,"page":62},"\u002Fdata-ops\u002Fcapability-exchange","6.data-ops\u002FCapability Exchange",[225],{"title":226,"path":227,"stem":228},"Leaderboard Calculation","\u002Fdata-ops\u002Fcapability-exchange\u002Fleaderboard-calculation","6.data-ops\u002FCapability Exchange\u002Fleaderboard-calculation",{"title":230,"path":231,"stem":232},"Account Portal (CAS)","\u002Fdata-ops\u002Faccount-portal","6.data-ops\u002Faccount-portal",{"title":234,"path":235,"stem":236,"children":237,"page":62},"Data Management","\u002Fdata-ops\u002Fdata-management","6.data-ops\u002Fdata-management",[238,242,246,250,254],{"title":239,"path":240,"stem":241},"Adding Products","\u002Fdata-ops\u002Fdata-management\u002Fadding-products","6.data-ops\u002Fdata-management\u002Fadding-products",{"title":243,"path":244,"stem":245},"Adding Vendors","\u002Fdata-ops\u002Fdata-management\u002Fadding-vendors","6.data-ops\u002Fdata-management\u002Fadding-vendors",{"title":247,"path":248,"stem":249},"Framework Mapping","\u002Fdata-ops\u002Fdata-management\u002Fframework-mapping","6.data-ops\u002Fdata-management\u002Fframework-mapping",{"title":251,"path":252,"stem":253},"Refreshing Vendors","\u002Fdata-ops\u002Fdata-management\u002Frefreshing-vendors","6.data-ops\u002Fdata-management\u002Frefreshing-vendors",{"title":255,"path":256,"stem":257},"Reviewing Draft Vendors","\u002Fdata-ops\u002Fdata-management\u002Freviewing-draft-vendors","6.data-ops\u002Fdata-management\u002Freviewing-draft-vendors",{"title":259,"path":260,"stem":261,"children":262,"page":62},"LLM Ops","\u002Fdata-ops\u002Fllm-ops","6.data-ops\u002Fllm-ops",[263,267],{"title":264,"path":265,"stem":266},"Agents","\u002Fdata-ops\u002Fllm-ops\u002Fagents","6.data-ops\u002Fllm-ops\u002F1.agents",{"title":268,"path":269,"stem":270},"ESPi Architecture & Query Flow","\u002Fdata-ops\u002Fllm-ops\u002Fespi-architecture","6.data-ops\u002Fllm-ops\u002F2.espi-architecture",{"title":272,"path":273,"stem":274},"Message Queues","\u002Fdata-ops\u002Fmessage-queues","6.data-ops\u002Fmessage-queues",{"title":276,"path":277,"stem":278},"Glossary","\u002Fglossary","glossary",{"id":280,"title":110,"body":281,"description":1027,"extension":1028,"links":1029,"meta":1030,"navigation":1031,"path":111,"seo":1032,"stem":112,"__hash__":1033},"docs\u002F3.engineering\u002Fdatabase-connection.md",{"type":282,"value":283,"toc":991},"minimark",[284,289,293,296,299,303,306,322,325,327,331,334,359,361,365,370,412,415,417,421,433,439,441,445,459,462,470,472,476,528,531,533,537,541,555,559,570,573,575,579,582,585,595,603,609,611,615,619,651,655,667,669,673,676,679,683,690,732,736,761,766,768,772,775,792,794,798,816,819,827,833,835,839,842,851,854,868,870,874,887,891,899,903,914,916,920,939,941,945,957,959,963,966],[285,286,288],"h2",{"id":287},"accessing-production-databases-via-the-aws-jump-box","Accessing Production Databases via the AWS Jump Box",[290,291,292],"p",{},"Use this process when you need temporary direct access to a production database for investigation, emergency fixes, Prisma migrations, or rollback support.",[290,294,295],{},"This method creates an SSH tunnel from your machine to the AWS network through the jump box, so your local tools can connect to a production database as though it were running locally.",[297,298],"hr",{},[285,300,302],{"id":301},"when-to-use-this","When to use this",[290,304,305],{},"Use this only when necessary, for example:",[307,308,309,313,316,319],"ul",{},[310,311,312],"li",{},"connecting local tools to a production database",[310,314,315],{},"running Prisma migrations against production",[310,317,318],{},"inspecting production data in MySQL Workbench or another client",[310,320,321],{},"connecting to a restored snapshot during rollback work",[290,323,324],{},"This is not the preferred long-term workflow. It is a temporary access path for operational needs.",[297,326],{},[285,328,330],{"id":329},"prerequisites","Prerequisites",[290,332,333],{},"You will need:",[307,335,336,344,347,350,353,356],{},[310,337,338,339,343],{},"AWS access to the ",[340,341,342],"code",{},"ESProfiler"," account with Administrator Access",[310,345,346],{},"PuTTY installed",[310,348,349],{},"PuTTYgen installed",[310,351,352],{},"your SSH public key added to the jump box user",[310,354,355],{},"your home or office IP address whitelisted in the jump box security group",[310,357,358],{},"a database client (e.g. MySQL Workbench)",[297,360],{},[285,362,364],{"id":363},"_1-generate-an-ssh-key-if-you-dont-already-have-one","1. Generate an SSH key (if you don’t already have one)",[366,367,369],"h3",{"id":368},"using-puttygen","Using PuTTYgen",[371,372,373,379,385,392,395,398,401],"ol",{},[310,374,375,376],{},"Open Start menu → search ",[340,377,378],{},"PuTTYgen",[310,380,381,382],{},"Set key size to ",[340,383,384],{},"4096",[310,386,387,388],{},"Click ",[389,390,391],"strong",{},"Generate",[310,393,394],{},"Move your mouse to generate entropy",[310,396,397],{},"Add a key comment (your name or username)",[310,399,400],{},"Set a memorable passphrase",[310,402,403,404],{},"Save:\n",[307,405,406,409],{},[310,407,408],{},"Private key",[310,410,411],{},"Public key",[290,413,414],{},"Store securely (e.g. a personal \"Security\" folder in Google Drive).",[297,416],{},[285,418,420],{"id":419},"_2-share-your-public-key","2. Share your public key",[371,422,423,430],{},[310,424,425,426,429],{},"Copy the ",[389,427,428],{},"public key text"," from PuTTYgen",[310,431,432],{},"Send it to whoever manages jump box access",[290,434,435,438],{},[389,436,437],{},"Important:"," send the full key text, not just a file.",[297,440],{},[285,442,444],{"id":443},"_3-get-your-ip-address-whitelisted","3. Get your IP address whitelisted",[371,446,447,453,456],{},[310,448,449,450],{},"Google: ",[340,451,452],{},"what's my IP",[310,454,455],{},"Copy your IPv4 address",[310,457,458],{},"Send it to the AWS admin",[290,460,461],{},"You may need:",[307,463,464,467],{},[310,465,466],{},"office IP",[310,468,469],{},"home IP",[297,471],{},[285,473,475],{"id":474},"_4-add-ip-to-aws-security-group","4. Add IP to AWS security group",[371,477,478,483,489,495,499,505,508],{},[310,479,480,481],{},"Open AWS → ",[340,482,342],{},[310,484,485,486],{},"Go to ",[340,487,488],{},"EC2",[310,490,491,492],{},"Select instance: ",[340,493,494],{},"ESP1 connector",[310,496,485,497],{},[389,498,64],{},[310,500,501,502],{},"Open security group: ",[340,503,504],{},"DHCP ssh",[310,506,507],{},"Edit inbound rules",[310,509,510,511],{},"Add:\n",[307,512,513,519,522],{},[310,514,515,516],{},"Port: ",[340,517,518],{},"22",[310,520,521],{},"Source: your IP",[310,523,524,525],{},"Description: e.g. ",[340,526,527],{},"Joe home",[290,529,530],{},"Save.",[297,532],{},[285,534,536],{"id":535},"_5-configure-putty-connection","5. Configure PuTTY connection",[366,538,540],{"id":539},"session-setup","Session setup",[307,542,543,549],{},[310,544,545,546],{},"Host: ",[340,547,548],{},"your-username@X.X.X.X",[310,550,551,552],{},"Save session as: ",[340,553,554],{},"ESP AWS",[366,556,558],{"id":557},"add-private-key","Add private key",[307,560,561,564,567],{},[310,562,563],{},"Connection → SSH → Credentials",[310,565,566],{},"Load your private key",[310,568,569],{},"Save session again",[290,571,572],{},"Open the session.",[297,574],{},[285,576,578],{"id":577},"_6-log-in-and-change-password","6. Log in and change password",[290,580,581],{},"After login:",[290,583,584],{},"Run:",[586,587,592],"pre",{"className":588,"code":590,"language":591},[589],"language-text","passwd\n","text",[340,593,590],{"__ignoreMap":594},"",[307,596,597,600],{},[310,598,599],{},"Enter your assigned temporary password",[310,601,602],{},"Set your own password",[290,604,605,608],{},[389,606,607],{},"Tip:"," Right-click = paste in PuTTY.",[297,610],{},[285,612,614],{"id":613},"_7-get-database-endpoint-aws-rds","7. Get database endpoint (AWS RDS)",[366,616,618],{"id":617},"mysql-services","MySQL (services)",[371,620,621,624,630,637,643,646],{},[310,622,623],{},"AWS → RDS",[310,625,626,627],{},"Region: ",[340,628,629],{},"eu-west-2",[310,631,632,633,636],{},"DB Instances → select DB (e.g. ",[340,634,635],{},"service8",")",[310,638,639,640],{},"Open ",[389,641,642],{},"Endpoints",[310,644,645],{},"Copy endpoint",[310,647,515,648],{},[340,649,650],{},"3306",[366,652,654],{"id":653},"postgresql-pcx","PostgreSQL (PCX)",[371,656,657,660,662],{},[310,658,659],{},"Open PostgreSQL instance",[310,661,645],{},[310,663,515,664],{},[340,665,666],{},"5432",[297,668],{},[285,670,672],{"id":671},"_8-configure-ssh-tunnels-in-putty","8. Configure SSH tunnels in PuTTY",[290,674,675],{},"Path:",[290,677,678],{},"Connection → SSH → Tunnels",[366,680,682],{"id":681},"recommended-ports","Recommended ports",[290,684,685,686,689],{},"These map a local port on your machine (e.g. ",[340,687,688],{},"13306",") to the remote port\u002Fhost",[691,692,693,709],"table",{},[694,695,696],"thead",{},[697,698,699,703,706],"tr",{},[700,701,702],"th",{},"DB Type",[700,704,705],{},"Local Port",[700,707,708],{},"Remote Port",[710,711,712,722],"tbody",{},[697,713,714,718,720],{},[715,716,717],"td",{},"MySQL",[715,719,688],{},[715,721,650],{},[697,723,724,727,730],{},[715,725,726],{},"PostgreSQL",[715,728,729],{},"15432",[715,731,666],{},[366,733,735],{"id":734},"setup","Setup",[371,737,738,741,747,752,755,758],{},[310,739,740],{},"Enter source port",[310,742,743,744],{},"Enter destination: ",[340,745,746],{},"\u003Cendpoint>:port",[310,748,387,749],{},[389,750,751],{},"Add",[310,753,754],{},"Repeat if needed",[310,756,757],{},"Go to Session → Save",[310,759,760],{},"Open session",[290,762,763,765],{},[389,764,437],{}," tunnel only works while PuTTY is open.",[297,767],{},[285,769,771],{"id":770},"_9-connect-via-local-tools","9. Connect via local tools",[290,773,774],{},"Example for Platform DB (MySQL Workbench):",[307,776,777,782,786],{},[310,778,545,779],{},[340,780,781],{},"127.0.0.1",[310,783,515,784],{},[340,785,688],{},[310,787,788,789],{},"Username: ",[340,790,791],{},"espadministrator",[297,793],{},[285,795,797],{"id":796},"_10-get-database-password-secrets-manager","10. Get database password (Secrets Manager)",[371,799,800,803,808,811],{},[310,801,802],{},"Open DB in AWS",[310,804,485,805],{},[389,806,807],{},"Configuration",[310,809,810],{},"Open linked secret",[310,812,387,813],{},[389,814,815],{},"Retrieve secret value",[290,817,818],{},"Copy:",[307,820,821,824],{},[310,822,823],{},"username",[310,825,826],{},"password",[290,828,829,832],{},[389,830,831],{},"Note:"," password rotates regularly — do not store permanently.",[297,834],{},[285,836,838],{"id":837},"_11-using-with-apps-prisma","11. Using with apps \u002F Prisma",[290,840,841],{},"Use:",[307,843,844,848],{},[310,845,545,846],{},[340,847,781],{},[310,849,850],{},"Port: forwarded port",[290,852,853],{},"Examples:",[307,855,856,862],{},[310,857,858,859],{},"MySQL: ",[340,860,861],{},"127.0.0.1:13306",[310,863,864,865],{},"Postgres: ",[340,866,867],{},"127.0.0.1:15432",[297,869],{},[285,871,873],{"id":872},"_12-rollback-via-snapshots","12. Rollback via snapshots",[371,875,876,879,884],{},[310,877,878],{},"Open snapshot in AWS",[310,880,387,881],{},[389,882,883],{},"Restore",[310,885,886],{},"Give new DB name",[366,888,890],{"id":889},"key-behaviour","Key behaviour",[307,892,893,896],{},[310,894,895],{},"Does NOT overwrite production DB",[310,897,898],{},"Creates a new cluster",[366,900,902],{"id":901},"workflow","Workflow",[371,904,905,908,911],{},[310,906,907],{},"Connect to restored DB",[310,909,910],{},"Extract required data\u002Fschema",[310,912,913],{},"Apply to live DB",[297,915],{},[285,917,919],{"id":918},"operational-notes","Operational notes",[307,921,922,925,928,931,936],{},[310,923,924],{},"Keep PuTTY open while connected",[310,926,927],{},"Check IP whitelist if connection fails",[310,929,930],{},"Check SSH key if auth fails",[310,932,933,934],{},"Ensure region is ",[340,935,629],{},[310,937,938],{},"Avoid port clashes with local dev",[297,940],{},[285,942,944],{"id":943},"standard-ports","Standard ports",[307,946,947,952],{},[310,948,949,950],{},"MySQL production: ",[340,951,688],{},[310,953,954,955],{},"PostgreSQL production: ",[340,956,729],{},[297,958],{},[285,960,962],{"id":961},"new-starter-checklist","New starter checklist",[290,964,965],{},"Ensure:",[307,967,968,971,974,977,980,982,985,988],{},[310,969,970],{},"AWS access granted",[310,972,973],{},"Correct AWS roles assigned",[310,975,976],{},"SSH key created + added",[310,978,979],{},"IP whitelisted",[310,981,346],{},[310,983,984],{},"Database access tested",[310,986,987],{},"Google Cloud access granted (if needed)",[310,989,990],{},"Remote support tooling installed",{"title":594,"searchDepth":992,"depth":992,"links":993},2,[994,995,996,997,1001,1002,1003,1004,1008,1009,1013,1017,1018,1019,1020,1024,1025,1026],{"id":287,"depth":992,"text":288},{"id":301,"depth":992,"text":302},{"id":329,"depth":992,"text":330},{"id":363,"depth":992,"text":364,"children":998},[999],{"id":368,"depth":1000,"text":369},3,{"id":419,"depth":992,"text":420},{"id":443,"depth":992,"text":444},{"id":474,"depth":992,"text":475},{"id":535,"depth":992,"text":536,"children":1005},[1006,1007],{"id":539,"depth":1000,"text":540},{"id":557,"depth":1000,"text":558},{"id":577,"depth":992,"text":578},{"id":613,"depth":992,"text":614,"children":1010},[1011,1012],{"id":617,"depth":1000,"text":618},{"id":653,"depth":1000,"text":654},{"id":671,"depth":992,"text":672,"children":1014},[1015,1016],{"id":681,"depth":1000,"text":682},{"id":734,"depth":1000,"text":735},{"id":770,"depth":992,"text":771},{"id":796,"depth":992,"text":797},{"id":837,"depth":992,"text":838},{"id":872,"depth":992,"text":873,"children":1021},[1022,1023],{"id":889,"depth":1000,"text":890},{"id":901,"depth":1000,"text":902},{"id":918,"depth":992,"text":919},{"id":943,"depth":992,"text":944},{"id":961,"depth":992,"text":962},"Accessing the production database in rollback situations.","md",null,{},true,{"title":110,"description":1027},"o7eOm7BtpnYGZu273xmLC9YSlIVCVNvtG0CvHDdo268",[1035,1037],{"title":106,"path":107,"stem":108,"description":1036,"children":-1},"If you're contributing to ESProfiler, this section provides you with quick links to tools, resources and best practices to help you in your day-to-day role and work seamlessly with the rest of the engineering team.",{"title":114,"path":115,"stem":116,"children":-1,"description":1038},"A comprehensive overview of the deployment process for new ESProfiler tenants",1784892029714]